{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "dfcfa84d",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "ca23e8a8",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.abc import x,y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "1fcf690b",
   "metadata": {},
   "outputs": [],
   "source": [
    "f=Function(\"f\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "75ec279e",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.abc import t,theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "18f09d19",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{1 - x^{2}} + 3 \\sqrt{1 - y^{2}} = 1$"
      ],
      "text/plain": [
       "Eq(sqrt(1 - x**2) + 3*sqrt(1 - y**2), 1)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Eq(sqrt(1-x**2)+3*sqrt(1-y**2),1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "61f172f9",
   "metadata": {},
   "outputs": [],
   "source": [
    "answer=nonlinsolve([Eq(x-3*y,2*sqrt(2)),Eq(sqrt(1-x**2)+3*sqrt(1-y**2),1)],[x,y])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "3987818c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(sqrt(2)/9 + sqrt(35)/18, -17*sqrt(2)/27 + sqrt(35)/54),\n",
       " (-sqrt(35)/18 + sqrt(2)/9, -17*sqrt(2)/27 - sqrt(35)/54)]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(answer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "2bd448b7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( \\frac{\\sqrt{2}}{9} + \\frac{\\sqrt{35}}{18}, \\  - \\frac{17 \\sqrt{2}}{27} + \\frac{\\sqrt{35}}{54}\\right)$"
      ],
      "text/plain": [
       "(sqrt(2)/9 + sqrt(35)/18, -17*sqrt(2)/27 + sqrt(35)/54)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(list(answer)[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "068b6cee",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0.485805939324767$"
      ],
      "text/plain": [
       "0.485805939324767"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "N(list(answer)[0][0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "6efcdf71",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -0.780873728473808$"
      ],
      "text/plain": [
       "-0.780873728473808"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "N(list(answer)[0][1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "34cbc977",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "85400786",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bdad4c2a",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy import *\n",
    "from sympy.abc import x,y,z,m,n,k,t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ef3b507d",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.calculus.util import continuous_domain,function_range"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "111ab927",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -1 + \\sqrt{2}$"
      ],
      "text/plain": [
       "-1 + sqrt(2)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tan(pi/8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "891a463c",
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=4*tan(x)*sin(pi/2-x)*cos(x-pi/3)-sqrt(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "709021d1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 2 \\cos{\\left(2 x + \\frac{\\pi}{6} \\right)}$"
      ],
      "text/plain": [
       "-2*cos(2*x + pi/6)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(expr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "3d68fd48",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-\\infty, \\infty\\right)$"
      ],
      "text/plain": [
       "Interval(-oo, oo)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "continuous_domain(expr,x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "4fa34c16",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[0, 6\\right]$"
      ],
      "text/plain": [
       "Interval(0, 6)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(cos(x)**2-3*cos(x)+2,x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "4f9a0366",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{5 \\pi}{8}$"
      ],
      "text/plain": [
       "5*pi/8"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "5*pi/8"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "f2c94171",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{5 \\pi}{8}$"
      ],
      "text/plain": [
       "5*pi/8"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Rational(5,8)*pi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "48d0a559",
   "metadata": {},
   "outputs": [],
   "source": [
    "A=Matrix([1,k])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "b05edebf",
   "metadata": {},
   "outputs": [],
   "source": [
    "B=Matrix([-1,3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "97b0887f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle k \\left(2 k + 3\\right) + 1$"
      ],
      "text/plain": [
       "k*(2*k + 3) + 1"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(2*A+B).dot(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "9283e6b1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{-1, - \\frac{1}{2}\\right\\}$"
      ],
      "text/plain": [
       "{-1, -1/2}"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset((2*A+B).dot(A),k,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "52368c98",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\begin{matrix}1\\\\2 k + 3\\end{matrix}\\right]$"
      ],
      "text/plain": [
       "Matrix([\n",
       "[      1],\n",
       "[2*k + 3]])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "2*A+B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "8d36f50d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-\\infty, -2 - \\frac{\\sqrt{14}}{2}\\right) \\cup \\left(-2 + \\frac{\\sqrt{14}}{2}, \\infty\\right)$"
      ],
      "text/plain": [
       "Union(Interval.open(-oo, -2 - sqrt(14)/2), Interval.open(-2 + sqrt(14)/2, oo))"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(4*(2*x+1)+4*x*(2*x+6)>0,x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "f91c3b13",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2}{5} + \\frac{3 i}{5}$"
      ],
      "text/plain": [
       "2/5 + 3*I/5"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(2+3*I)/5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "41c77852",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "5/7\n",
      "3\n",
      "3/7\n",
      "4\n",
      "3/7\n"
     ]
    }
   ],
   "source": [
    "#t=2\n",
    "n=1\n",
    "a=Rational(6,7)\n",
    "\n",
    "while (True):\n",
    "    n+=1\n",
    "    if(a==Rational(3,7)):\n",
    "        print(n)\n",
    "        print(a)\n",
    "        break\n",
    "    elif (a<Rational(1,2)):\n",
    "        a*=2\n",
    "    else:\n",
    "        a=2*a-1\n",
    "  \n",
    "    print(n)\n",
    "    print(a)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "5756dff2",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3/7\n",
      "4\n",
      "3/7\n",
      "7\n",
      "3/7\n",
      "10\n",
      "3/7\n",
      "13\n",
      "3/7\n",
      "16\n",
      "3/7\n",
      "19\n",
      "3/7\n",
      "22\n",
      "3/7\n",
      "25\n",
      "3/7\n",
      "28\n",
      "3/7\n",
      "31\n",
      "3/7\n",
      "34\n",
      "3/7\n",
      "37\n"
     ]
    }
   ],
   "source": [
    "#t=2\n",
    "n=1\n",
    "a=Rational(6,7)\n",
    "\n",
    "while (True):\n",
    "    n+=1\n",
    "    if(a==Rational(3,7)):\n",
    "        print(a)\n",
    "        print(n)\n",
    "        if (n>36):\n",
    "            break\n",
    "    if (a<Rational(1,2)):\n",
    "        a*=2\n",
    "    else:\n",
    "        a=2*a-1\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "3e6e0842",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a: 1/3 i: 3\n",
      "a: 1/4 i: 4\n",
      "a: 1/5 i: 5\n",
      "5\n"
     ]
    }
   ],
   "source": [
    "i=2\n",
    "a=Rational(1,2)\n",
    "while(a!=Rational(1,5)):\n",
    "    a*=Rational(i,i+1)\n",
    "    i+=1\n",
    "    print(\"a:\",a,\"i:\",i)\n",
    "print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "b6ee0cd7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "5 in Integers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "8ed3a430",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "log(4,2).is_Rational"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "2a6d1e18",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x: 0\n",
      "x: 1\n",
      "x: 2\n",
      "x: 3\n",
      "x: 4\n",
      "x: 5\n",
      "x: 6\n",
      "x: 7\n",
      "x: 8\n",
      "x: 9\n",
      "x: 10\n",
      "x: 11\n",
      "x: 12\n",
      "13\n"
     ]
    }
   ],
   "source": [
    "i=1\n",
    "n=0\n",
    "while(i<=4100):\n",
    "    x=log(i,2)\n",
    "    if x.is_Rational:\n",
    "        n+=1\n",
    "        print(\"x:\",x)\n",
    "    i+=1\n",
    "print(n)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4c24d153",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "bbb149a4",
   "metadata": {},
   "outputs": [],
   "source": [
    "eq=Eq(x**2/4+y**2,1).subs([(x,t/sqrt(5)),(y,2+2*t/sqrt(5))])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "56ca76b2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 17 t^{2} + 32 \\sqrt{5} t + 60$"
      ],
      "text/plain": [
       "17*t**2 + 32*sqrt(5)*t + 60"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand(eq.lhs-eq.rhs)*20"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "b62a0823",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\left(t \\sin{\\left(\\theta \\right)} + 2\\right)^{2}}{16} + \\frac{\\left(t \\cos{\\left(\\theta \\right)} + 1\\right)^{2}}{4} = 1$"
      ],
      "text/plain": [
       "Eq((t*sin(theta) + 2)**2/16 + (t*cos(theta) + 1)**2/4, 1)"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq=Eq(x**2/4+y**2/16,1).subs([(x,1+t*cos(theta)),(y,2+t*sin(theta))])\n",
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "2cc7a614",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle t^{2} \\left(\\sin^{2}{\\left(\\theta \\right)} + 4 \\cos^{2}{\\left(\\theta \\right)}\\right) + t \\left(4 \\sin{\\left(\\theta \\right)} + 8 \\cos{\\left(\\theta \\right)}\\right) - 8$"
      ],
      "text/plain": [
       "t**2*(sin(theta)**2 + 4*cos(theta)**2) + t*(4*sin(theta) + 8*cos(theta)) - 8"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "collect(expand(eq.lhs-eq.rhs)*16,t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "d9311d6c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[2, 4\\right]$"
      ],
      "text/plain": [
       "Interval(2, 4)"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(abs(6-2*x)<=2,x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "a0878393",
   "metadata": {},
   "outputs": [
    {
     "ename": "NotImplementedError",
     "evalue": "Unable to find critical points for Abs(1 + 4/x) + Abs(x - 1)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNotImplementedError\u001b[0m                       Traceback (most recent call last)",
      "\u001b[0;32m/var/folders/dx/_crdzvnd0cg5f4sgbnvzvvgh0000gn/T/ipykernel_50538/1161233590.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfunction_range\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mReals\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/calculus/util.py\u001b[0m in \u001b[0;36mfunction_range\u001b[0;34m(f, symbol, domain)\u001b[0m\n\u001b[1;32m    194\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    195\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msolution\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 196\u001b[0;31m                 raise NotImplementedError(\n\u001b[0m\u001b[1;32m    197\u001b[0m                         'Unable to find critical points for {}'.format(f))\n\u001b[1;32m    198\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msolution\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mImageSet\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNotImplementedError\u001b[0m: Unable to find critical points for Abs(1 + 4/x) + Abs(x - 1)"
     ]
    }
   ],
   "source": [
    "function_range(abs(x-1)+abs(4/x+1),x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "5c416f0c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left|{x - 2}\\right| + 2 \\left|{x + 1}\\right|$"
      ],
      "text/plain": [
       "Abs(x - 2) + 2*Abs(x + 1)"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=2*abs(x+1)+abs(x-2)\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "902a9d6c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-\\infty, -3\\right] \\cup \\left[3, \\infty\\right)$"
      ],
      "text/plain": [
       "Union(Interval(-oo, -3), Interval(3, oo))"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(expr>=9,x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "2f93014e",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "ename": "NotImplementedError",
     "evalue": "Unable to find critical points for Abs(x - 2) + 2*Abs(x + 1)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNotImplementedError\u001b[0m                       Traceback (most recent call last)",
      "\u001b[0;32m/var/folders/dx/_crdzvnd0cg5f4sgbnvzvvgh0000gn/T/ipykernel_50538/3398812139.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfunction_range\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mReals\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/calculus/util.py\u001b[0m in \u001b[0;36mfunction_range\u001b[0;34m(f, symbol, domain)\u001b[0m\n\u001b[1;32m    194\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    195\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msolution\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 196\u001b[0;31m                 raise NotImplementedError(\n\u001b[0m\u001b[1;32m    197\u001b[0m                         'Unable to find critical points for {}'.format(f))\n\u001b[1;32m    198\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msolution\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mImageSet\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNotImplementedError\u001b[0m: Unable to find critical points for Abs(x - 2) + 2*Abs(x + 1)"
     ]
    }
   ],
   "source": [
    "function_range(expr,x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "28974c99",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7f802a0e0a90>"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "1890f4b4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3$"
      ],
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "dd13929e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left|{x}\\right| + 3 \\left|{x - 2}\\right|$"
      ],
      "text/plain": [
       "Abs(x) + 3*Abs(x - 2)"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=3*abs(x-2)+abs(x)\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "a8920e4f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-\\infty, \\frac{3}{2}\\right) \\cup \\left(3, \\infty\\right)$"
      ],
      "text/plain": [
       "Union(Interval.open(-oo, 3/2), Interval.open(3, oo))"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(expr>2*x,x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "4b61297b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7f8029c18190>"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr,expr.subs(x,0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "id": "99678ca9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x,y,z:  0 25 75\n",
      "x,y,z:  4 18 78\n",
      "x,y,z:  8 11 81\n",
      "x,y,z:  12 4 84\n"
     ]
    }
   ],
   "source": [
    "x=0\n",
    "y=0\n",
    "z=0\n",
    "while (True):\n",
    "    y=25-Rational(7,4)*x\n",
    "    z=100-x-y\n",
    "    if (y<0):\n",
    "        break\n",
    "    else:\n",
    "        print(\"x,y,z: \",x,y,z)\n",
    "        x+=4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "id": "9567ffdd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sympy.core.function.UndefinedFunction"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "id": "ff36b223",
   "metadata": {},
   "outputs": [],
   "source": [
    "n=symbols(\"n\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "id": "4f745e11",
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=rsolve(2*f(n)-f(n-1)-2,f(n),{f(1):1})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "id": "4cc64ec8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2^{1 - n}$"
      ],
      "text/plain": [
       "2**(1 - n)"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(expr-expr.subs(n,n-1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "id": "bd8c86ba",
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=rsolve(f(n+1)-3*f(n)+4*n,f(n),{f(1):3})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "id": "5790bd2e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 3 \\cdot 3^{n} + 12 n$"
      ],
      "text/plain": [
       "-3*3**n + 12*n"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "id": "1669e27e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -3$"
      ],
      "text/plain": [
       "-3"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(n,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "id": "5497a01a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -45$"
      ],
      "text/plain": [
       "-45"
      ]
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(n,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "id": "81a9630f",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.abc import a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "id": "5692df75",
   "metadata": {},
   "outputs": [],
   "source": [
    "x=symbols(\"x\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bf6476c3",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "id": "340d99a6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a x + \\frac{x}{x + 1}$"
      ],
      "text/plain": [
       "a*x + x/(x + 1)"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=x/(x+1)+a*x\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "id": "5644c6c1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a + 1$"
      ],
      "text/plain": [
       "a + 1"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr,x).subs(x,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "id": "bb33993c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a + \\frac{1}{\\left(x + 1\\right)^{2}}$"
      ],
      "text/plain": [
       "a + (x + 1)**(-2)"
      ]
     },
     "execution_count": 124,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(diff(expr,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "id": "d26a1f0d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 a + \\frac{2}{3}$"
      ],
      "text/plain": [
       "2*a + 2/3"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "id": "fb9292f2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 9$"
      ],
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 126,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(x**3-3*x**2,x).subs(x,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "id": "90c2aa48",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0$"
      ],
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(x**3-3*x**2).subs(x,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "id": "792587a7",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7f8000059cd0>"
      ]
     },
     "execution_count": 128,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(x**3-3*x**2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "id": "8345fcbf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle e^{- x} \\sin{\\left(x \\right)}$"
      ],
      "text/plain": [
       "exp(-x)*sin(x)"
      ]
     },
     "execution_count": 129,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=sin(x)/exp(x)\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "id": "5cfb7e15",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{2} e^{- x} \\cos{\\left(x + \\frac{\\pi}{4} \\right)}$"
      ],
      "text/plain": [
       "sqrt(2)*exp(-x)*cos(x + pi/4)"
      ]
     },
     "execution_count": 135,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(diff(expr,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "id": "f39f4e3d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{2 n \\pi + \\frac{5 \\pi}{4}\\; \\middle|\\; n \\in \\mathbb{Z}\\right\\} \\cup \\left\\{2 n \\pi + \\frac{\\pi}{4}\\; \\middle|\\; n \\in \\mathbb{Z}\\right\\}$"
      ],
      "text/plain": [
       "Union(ImageSet(Lambda(_n, 2*_n*pi + 5*pi/4), Integers), ImageSet(Lambda(_n, 2*_n*pi + pi/4), Integers))"
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(diff(expr,x),x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "id": "9a9cfe42",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{a}{x} + 2 x + \\log{\\left(x \\right)}$"
      ],
      "text/plain": [
       "-a/x + 2*x + log(x)"
      ]
     },
     "execution_count": 136,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=2*x+ln(x)-a/x\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "id": "a382506f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{a}{x^{2}} + 2 + \\frac{1}{x}$"
      ],
      "text/plain": [
       "a/x**2 + 2 + 1/x"
      ]
     },
     "execution_count": 145,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "id": "1035127f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{- \\frac{\\sqrt{1 - 8 a}}{4} - \\frac{1}{4}, \\frac{\\sqrt{1 - 8 a}}{4} - \\frac{1}{4}\\right\\}$"
      ],
      "text/plain": [
       "{-sqrt(1 - 8*a)/4 - 1/4, sqrt(1 - 8*a)/4 - 1/4}"
      ]
     },
     "execution_count": 140,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(diff(expr,x),x).args[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "id": "0280d634",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-\\infty, \\frac{1}{8}\\right]$"
      ],
      "text/plain": [
       "Interval(-oo, 1/8)"
      ]
     },
     "execution_count": 142,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(list(solveset(diff(expr,x),x).args[0])[0]<=1,a,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "id": "e87680cb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-\\infty, -10\\right]$"
      ],
      "text/plain": [
       "Interval(-oo, -10)"
      ]
     },
     "execution_count": 144,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(list(solveset(diff(expr,x),x).args[0])[1]>=2,a,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "id": "fe65c69a",
   "metadata": {},
   "outputs": [],
   "source": [
    "a=symbols(\"a\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "id": "ffb03182",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - a \\left(x^{2} + 2 x\\right) + x e^{x}$"
      ],
      "text/plain": [
       "-a*(x**2 + 2*x) + x*exp(x)"
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=x*exp(x)-a*(x**2+2*x)\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "id": "4ca440b2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 2 a \\left(x + 1\\right) + x e^{x} + e^{x}$"
      ],
      "text/plain": [
       "-2*a*(x + 1) + x*exp(x) + exp(x)"
      ]
     },
     "execution_count": 158,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "together(diff(expr,x),deep=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "id": "d7a50ddf",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on function together in module sympy.polys.rationaltools:\n",
      "\n",
      "together(expr, deep=False, fraction=True)\n",
      "    Denest and combine rational expressions using symbolic methods.\n",
      "    \n",
      "    This function takes an expression or a container of expressions\n",
      "    and puts it (them) together by denesting and combining rational\n",
      "    subexpressions. No heroic measures are taken to minimize degree\n",
      "    of the resulting numerator and denominator. To obtain completely\n",
      "    reduced expression use :func:`~.cancel`. However, :func:`~.together`\n",
      "    can preserve as much as possible of the structure of the input\n",
      "    expression in the output (no expansion is performed).\n",
      "    \n",
      "    A wide variety of objects can be put together including lists,\n",
      "    tuples, sets, relational objects, integrals and others. It is\n",
      "    also possible to transform interior of function applications,\n",
      "    by setting ``deep`` flag to ``True``.\n",
      "    \n",
      "    By definition, :func:`~.together` is a complement to :func:`~.apart`,\n",
      "    so ``apart(together(expr))`` should return expr unchanged. Note\n",
      "    however, that :func:`~.together` uses only symbolic methods, so\n",
      "    it might be necessary to use :func:`~.cancel` to perform algebraic\n",
      "    simplification and minimize degree of the numerator and denominator.\n",
      "    \n",
      "    Examples\n",
      "    ========\n",
      "    \n",
      "    >>> from sympy import together, exp\n",
      "    >>> from sympy.abc import x, y, z\n",
      "    \n",
      "    >>> together(1/x + 1/y)\n",
      "    (x + y)/(x*y)\n",
      "    >>> together(1/x + 1/y + 1/z)\n",
      "    (x*y + x*z + y*z)/(x*y*z)\n",
      "    \n",
      "    >>> together(1/(x*y) + 1/y**2)\n",
      "    (x + y)/(x*y**2)\n",
      "    \n",
      "    >>> together(1/(1 + 1/x) + 1/(1 + 1/y))\n",
      "    (x*(y + 1) + y*(x + 1))/((x + 1)*(y + 1))\n",
      "    \n",
      "    >>> together(exp(1/x + 1/y))\n",
      "    exp(1/y + 1/x)\n",
      "    >>> together(exp(1/x + 1/y), deep=True)\n",
      "    exp((x + y)/(x*y))\n",
      "    \n",
      "    >>> together(1/exp(x) + 1/(x*exp(x)))\n",
      "    (x + 1)*exp(-x)/x\n",
      "    \n",
      "    >>> together(1/exp(2*x) + 1/(x*exp(3*x)))\n",
      "    (x*exp(x) + 1)*exp(-3*x)/x\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(together)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "id": "5ad40da2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{-1, \\log{\\left(2 a \\right)}\\right\\}$"
      ],
      "text/plain": [
       "{-1, log(2*a)}"
      ]
     },
     "execution_count": 160,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(diff(expr,x),x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "id": "7ee1b0a7",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.abc import a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "id": "335451fc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4 a x + \\frac{x^{3}}{3} - x^{2} \\left(\\frac{a}{2} + 2\\right)$"
      ],
      "text/plain": [
       "4*a*x + x**3/3 - x**2*(a/2 + 2)"
      ]
     },
     "execution_count": 162,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=Rational(1,3)*x**3-(a+4)/2*x**2+4*a*x\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "id": "69704b7f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x^{3}}{3} - 3 x^{2} + 8 x$"
      ],
      "text/plain": [
       "x**3/3 - 3*x**2 + 8*x"
      ]
     },
     "execution_count": 167,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(a,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "id": "6e7dfc60",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{16}{3}$"
      ],
      "text/plain": [
       "16/3"
      ]
     },
     "execution_count": 164,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(a,2).subs(x,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "id": "469b5bc8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3$"
      ],
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr.subs(a,2),x).subs(x,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "id": "3ac7391b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4 a + x^{2} - 2 x \\left(\\frac{a}{2} + 2\\right)$"
      ],
      "text/plain": [
       "4*a + x**2 - 2*x*(a/2 + 2)"
      ]
     },
     "execution_count": 169,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "id": "9c40e094",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4 a + x^{2} - x \\left(a + 4\\right)$"
      ],
      "text/plain": [
       "4*a + x**2 - x*(a + 4)"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "together(diff(expr,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "id": "e37e0b9b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\mathbb{R} \\cap \\left\\{4, a\\right\\}$"
      ],
      "text/plain": [
       "Intersection({4, a}, Reals)"
      ]
     },
     "execution_count": 168,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(diff(expr,x),x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "id": "58d6ab81",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x^{2} - 8 x + 6 \\log{\\left(x \\right)} + 1$"
      ],
      "text/plain": [
       "x**2 - 8*x + 6*log(x) + 1"
      ]
     },
     "execution_count": 173,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=x**2-8*x+6*ln(x)+1\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "id": "94dff397",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 x - 8 + \\frac{6}{x}$"
      ],
      "text/plain": [
       "2*x - 8 + 6/x"
      ]
     },
     "execution_count": 175,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "id": "91c39f16",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7f8052a2c9a0>"
      ]
     },
     "execution_count": 179,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr,(x,0.2,4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "id": "29d170b7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -6$"
      ],
      "text/plain": [
       "-6"
      ]
     },
     "execution_count": 180,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "id": "0c1dbfed",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{1, 3\\right\\}$"
      ],
      "text/plain": [
       "{1, 3}"
      ]
     },
     "execution_count": 176,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(diff(expr,x),x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f3a2f1b9",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "id": "fb2729f3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-\\infty, \\infty\\right)$"
      ],
      "text/plain": [
       "Interval(-oo, oo)"
      ]
     },
     "execution_count": 174,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(expr,x,Interval.open(0,oo))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "id": "12f60ac1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\log{\\left(x \\right)} + 1}{x}$"
      ],
      "text/plain": [
       "(log(x) + 1)/x"
      ]
     },
     "execution_count": 181,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=(ln(x)+1)/x\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "id": "80fdd9cf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{\\log{\\left(x \\right)}}{x^{2}}$"
      ],
      "text/plain": [
       "-log(x)/x**2"
      ]
     },
     "execution_count": 183,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "together(diff(expr,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "id": "5ee1f8c8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x^{3}}{3} - 4 x + 4$"
      ],
      "text/plain": [
       "x**3/3 - 4*x + 4"
      ]
     },
     "execution_count": 184,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=x**3/3-4*x+4\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "id": "bc3cc6a9",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7f802a7e5610>"
      ]
     },
     "execution_count": 186,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr,(x,-5,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "id": "ad6790a5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{28}{3}$"
      ],
      "text/plain": [
       "28/3"
      ]
     },
     "execution_count": 188,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,-2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "id": "2e6e402d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{4}{3}$"
      ],
      "text/plain": [
       "-4/3"
      ]
     },
     "execution_count": 189,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "id": "ca880c70",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x^{2} - 4$"
      ],
      "text/plain": [
       "x**2 - 4"
      ]
     },
     "execution_count": 187,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "id": "fe45bd43",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x^{3} - 3 x^{2} + 4$"
      ],
      "text/plain": [
       "x**3 - 3*x**2 + 4"
      ]
     },
     "execution_count": 190,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=x**3-3*x**2+4\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "id": "8e59f911",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3 x^{2} - 6 x$"
      ],
      "text/plain": [
       "3*x**2 - 6*x"
      ]
     },
     "execution_count": 192,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "id": "1e1aa4f7",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7f802a8e35e0>"
      ]
     },
     "execution_count": 193,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr,(x,-1,3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "id": "a21852c7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0$"
      ],
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 194,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "id": "2b201c88",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - a x + x e^{x}$"
      ],
      "text/plain": [
       "-a*x + x*exp(x)"
      ]
     },
     "execution_count": 195,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=x*exp(x)-a*x\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 212,
   "id": "6d15c2b7",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - a + \\left(x + 1\\right) e^{x}$"
      ],
      "text/plain": [
       "-a + (x + 1)*exp(x)"
      ]
     },
     "execution_count": 212,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "collect(diff(expr,x),exp(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "id": "1c4185b4",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 1 - a$"
      ],
      "text/plain": [
       "1 - a"
      ]
     },
     "execution_count": 200,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr,x).subs(x,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "id": "6d6c351b",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAasAAAEfCAYAAAD/SukOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAniUlEQVR4nO3deXxV9YH38c/JTvadhIQQSFhCAFnCLriClLqM1rY6OkqpUu10Hts+7VNbO9M+M221nc5Ua+dpX5liq63VtrajDnYQRVv25bIaQAhZIAkh+82+3nueP5JQQJYAyT3n3Pt9v168kHuPni+XmC/nd36/3zFM00RERMTOgqwOICIicjkqKxERsT2VlYiI2J7KSkREbE9lJSIitqeyEhER21NZiYiI7amsRETE9kKsDiDi7wzDSAUWA2OATqAIcJmm6bU0mIiDGNrBQmRkGIZxE/AkkAjsA2qBCGASkAO8BvybaZotloUUcQiVlcgIMQzjX4HnTdM8eYH3QoDbgWDTNP/g83AiDqOyEhER29MEC5ERZhjGrwzDiDvr19mGYWy0MpOI06isREbeFmCnYRgrDcN4FNgAPGttJBFnudwwoMYIRYbBli1buOmmm0hOTmbfvn2kpaX57NwrVqxg/fr1PjufyBUyhnKQrqxERtivfvUrVq9ezUsvvcSqVatYuXIlBw4c8Nn56+vrfXYukZGidVYiI+wPf/gDW7ZsITU1lfvvv5+7776bVatWsW/fPqujiTiGhgFFLNDT00NYWJhPzlVQUIDL5fLJuUSugoYBRaz0ne98h8bGxgu+FxYWxnvvvce6det8nErEmTQMKDJCpk+fzh133EFERASzZ88mJSWFrq4uiouL2b9/P7feeivf+MY3rI4p4ggqK5ER8tprr7F161Z+8IMfkJqaSnV1NbGxsTz44IMUFhYyatQoqyOKOIbKSmSE7NmzhxMnTvDyyy/z/vvvn/NeZ2enykrkCqisREbIY489xooVKygtLaWgoODM66ZpYhgGpaWlFqYTcRbNBhQZYY8//jg//elPLTu/ZgOKzWk2oIgdWFlUIsOturmTZ989RpW706fnVVmJiMiQ7Spr5Nl3i3F39Pj0vCorEREZsn0n3YwKDWby6BifnldlJSIiQ7a/ws30jDhCgn1bHyorEREZku4+D4dPtTAzK97n51ZZiYjIkBypbqXH42Xm2Hifn1tlJSIiQ3Kgwg3AdSorERGxq/0VblJiwhkTF+Hzc6usRERkSPZXuJk5Nh7DGNI63mGlshIRkctyd/RQVt9uyf0qUFmJiMgQ7B+4XzVLZSUiInZ1oKIZw4DpmXGWnF9lJWJTq1evJjU1lWnTpp157atf/SpTpkxhxowZ3H333bjdbusCSkDZX9FEbko0MRGhlpxfZSViU6tWrWL9+vXnvLZs2TKKioo4ePAgkyZN4umnn7YonQQS0zTPTK6wispKxKaWLl1KYmLiOa8tX76ckJD+x9AtWLCAyspKK6JJgDnZ2EFTR68lO1cMUlmJONQLL7zAxz72sQu+V1hYSEFBAQUFBdTV1fk4mfibwckVurISkSvy3e9+l5CQEB544IELvr9mzRpcLhcul4uUlBQfpxN/s++km4jQIJ/vtH42PdZexGFefPFF1q1bx8aNGy1ZnCmB50ClNTutn01XViIOsn79er7//e/z5ptvEhkZaXUcCQA9fV4OnWqxdAgQVFYitnX//fezcOFCjh49SmZmJmvXruULX/gCra2tLFu2jJkzZ/LYY49ZHVP83JHqFnr6vMwcm2BpDg0DitjUK6+88pHXPvvZz1qQRALZmckVFs4EBF1ZiYjIJVi50/rZVFYiInJRByrcXJdpzU7rZ1NZiYjIBTV39FJa384si4cAQWUlIiIXsb/SDVi7GHiQykpERC5o/0k3hgEzLNpp/WwqKxERuSCrd1o/m8pKREQ+wg47rZ9NZSUiIh9R0dhJU0cv16msRETErvZVNAH2mFwBKisREbmAPSeaiAwLZkqadTutn01lJSIiH7GrrJE54xIs3Wn9bPZIISIituHu6OHD063My068/ME+orISEZFz7C7vv181b7zKSkREbGpXWQNhwUG2mQkIKisRETnPrvImZo6NJyI02OooZ6isRETkjPbuPoqqmm01BAgqKxEROcvek014vKbKSkRE7GtXWSPBQQazx1n7GPvzqaxEROSMnWWN5I+JJTo8xOoo51BZiYgIAN19HvZXuG21vmqQykpERAA4WNlMT5/XdverQGUlIiIDdpU1AjBXV1YiImJXO8samTw6hoSoMKujfITKSkRE6PN42VPeaMshQFBZiYgIcKS6lfYeD3NVViJyJVavXk1qairTpk0781pjYyPLli1j4sSJLFu2jKamJgsTij/Z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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7f802a9774c0>"
      ]
     },
     "execution_count": 202,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr.subs(a,1),(x,-3,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 211,
   "id": "5c931485",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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ZIxChCb3a/jFERdw40PYfrgBs7I9yE7RYXKKDvHamBB8O2k899xz2LZtGxITE7Fv3z6pywm5119/HQ899JDUZVyVhs5erP3DUZyo68A/fWU6vrt0etT8R2OsrFYrsrOz0draCiBwQfGhQ4dCcuygh9XSpUvR2Ng47P2NGzfC6/Wivb0dn3zyCQ4fPoyvfe1rqK6ujoi/EKN97yeeeAIbNmyAIAjYsGEDnn76abz++usSVHntFIpAt2BGvBYLspMG3h/8veOUavhjkyHqknDPQ9/E7o8OYfFX70WjwwVMMeGXH10EcHHgs8m6GExO0WFKahympAYCLCctsJyu18j678VoP+/77rsPGzduxMaNG/Hzn/8cxcXF+OlPfypBlcF3pe/dv6xSqfDoo4+Gurxr9kl1K9a/eRS9bh+2fP1GLJ+bOWT9WL53NBjptFGo/p0GPaz++te/Xnbdq6++ilWrVkEQBCxatAgKhQItLS0RMQHmaN97sG9961u45557xrma0Lnc9z558iS2bViDv378BoC+KVymGLFt1270CLG42NYTeLT24FhdO96puITBp83i1EpMSY1DTpoOOalxmJr22SMlTi15kI315/3II4/g7rvvjpiwutL3/v3vf4933nkHH3zwgeQ/o7EQRRG/+7gWL7x7GlNSddhZtBjGjPhh24315x3ppJyaKaTdgPfffz8+/PBD3HbbbTh37hzcbndUnHBvaGgYmL5k165dmDt3rsQVjb958+ahubl54HVOTg7Mhw5e9uft9vph7ejFhdZuXGjtQW1rN2pbunG6wY73P20aMqoxQavC1HQ9ctPiAo90PXLTA0Emh2H5FosF06dPBwD85S9/wcyZMyWuKDTKysqwefNmfPTRR8Nm7JajXrcPP9x1EruOWbF01gT84qEFSIjgrulg6J++KS4uDm63e8Tpm8ZLSEcDut1uFBYW4vjx41Cr1XjppZdwxx13BPMQsvSNb3wDx48fhyAIyMnJwW9+8xtZzr01nnJycmA2m6/pPydenx/17b2oaelGdUsgxGpaulFtc+BSp3NgO0EAshJjMS1Dj2npcZiWrse0dD2MGXqk6UPXGnvwwQdx9uxZKBQKTJkyBVu2bMGkSdc/1ZjcGY1GuFwupKamAggMspDrKMjKS1145q0TqGzowveWzsD6243XfKnGrl278J3vfAc2mw1J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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7f80107ee2b0>"
      ]
     },
     "execution_count": 211,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(list(solveset(diff(expr,x),a))[0],(x,-6,0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 213,
   "id": "2c865be3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3 k x + x^{3} - x^{2} \\left(\\frac{3 k}{2} + \\frac{3}{2}\\right) + 1$"
      ],
      "text/plain": [
       "3*k*x + x**3 - x**2*(3*k/2 + 3/2) + 1"
      ]
     },
     "execution_count": 213,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=x**3-Rational(3,2)*(k+1)*x**2+3*k*x+1\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 221,
   "id": "365f411d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\left(k - 2\\right)^{2} \\left(k + 1\\right)$"
      ],
      "text/plain": [
       "-(k - 2)**2*(k + 1)"
      ]
     },
     "execution_count": 221,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor((simplify(expr.subs(x,k))-3)*2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 222,
   "id": "4ba8e007",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 x^{3} - 3 x^{2}$"
      ],
      "text/plain": [
       "2*x**3 - 3*x**2"
      ]
     },
     "execution_count": 222,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_h=2*(expr.subs(k,0)-1)\n",
    "expr_h"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 227,
   "id": "4a57977e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 6 \\left(2 x - 1\\right)$"
      ],
      "text/plain": [
       "6*(2*x - 1)"
      ]
     },
     "execution_count": 227,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr_h,x,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 228,
   "id": "00a92c8f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 6 x^{2} - 6 x$"
      ],
      "text/plain": [
       "6*x**2 - 6*x"
      ]
     },
     "execution_count": 228,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr_h,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 226,
   "id": "64ac95ea",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7f8040c0fa00>"
      ]
     },
     "execution_count": 226,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr_h,(x,-1,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "id": "defcecee",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.abc import x,y,t,m"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 232,
   "id": "3cbd95ff",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 2 t^{3} + 3 t^{2} + y = \\left(- t + x\\right) \\left(6 t^{2} - 6 t\\right)$"
      ],
      "text/plain": [
       "Eq(-2*t**3 + 3*t**2 + y, (-t + x)*(6*t**2 - 6*t))"
      ]
     },
     "execution_count": 232,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq=Eq(y-expr_h.subs(x,t),diff(expr_h,x).subs(x,t)*(x-t))\n",
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 237,
   "id": "e4aed1b3",
   "metadata": {},
   "outputs": [],
   "source": [
    "expr_m=list(solveset(eq.subs([(x,1),(y,m)]),m))[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 238,
   "id": "6e0f8874",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 t^{3} - 3 t^{2} - 6 \\left(t - 1\\right) \\left(t^{2} - t\\right)$"
      ],
      "text/plain": [
       "2*t**3 - 3*t**2 - 6*(t - 1)*(t**2 - t)"
      ]
     },
     "execution_count": 238,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_m"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 239,
   "id": "be3388a8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 4 t^{3} + 9 t^{2} - 6 t$"
      ],
      "text/plain": [
       "-4*t**3 + 9*t**2 - 6*t"
      ]
     },
     "execution_count": 239,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand(expr_m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 240,
   "id": "e7eb1c77",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - t \\left(4 t^{2} - 9 t + 6\\right)$"
      ],
      "text/plain": [
       "-t*(4*t**2 - 9*t + 6)"
      ]
     },
     "execution_count": 240,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(expr_m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "id": "0e5548fd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 12 t^{2} + 18 t - 6$"
      ],
      "text/plain": [
       "-12*t**2 + 18*t - 6"
      ]
     },
     "execution_count": 243,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand(diff(expr_m,t))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 244,
   "id": "749ace63",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 6 \\left(t - 1\\right) \\left(2 t - 1\\right)$"
      ],
      "text/plain": [
       "-6*(t - 1)*(2*t - 1)"
      ]
     },
     "execution_count": 244,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr_m,t))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 245,
   "id": "fa000820",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7f8052765220>"
      ]
     },
     "execution_count": 245,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr_m,(t,0,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 246,
   "id": "d3fe9549",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{5}{4}$"
      ],
      "text/plain": [
       "-5/4"
      ]
     },
     "execution_count": 246,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_m.subs(t,Rational(1,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 247,
   "id": "2f52f7ad",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -1$"
      ],
      "text/plain": [
       "-1"
      ]
     },
     "execution_count": 247,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_m.subs(t,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 248,
   "id": "2121a3d3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{13 \\pi x \\left(36 - x^{2}\\right)}{3}$"
      ],
      "text/plain": [
       "13*pi*x*(36 - x**2)/3"
      ]
     },
     "execution_count": 248,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=pi*(6**2-x**2)*(x/3+4*x)\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 250,
   "id": "8cdafe9e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 13 \\pi \\left(x^{2} - 12\\right)$"
      ],
      "text/plain": [
       "-13*pi*(x**2 - 12)"
      ]
     },
     "execution_count": 250,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 251,
   "id": "b66f0f39",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{- 2 \\sqrt{3}, 2 \\sqrt{3}\\right\\}$"
      ],
      "text/plain": [
       "{-2*sqrt(3), 2*sqrt(3)}"
      ]
     },
     "execution_count": 251,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(factor(diff(expr,x)),x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 252,
   "id": "d0d41af4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 208 \\sqrt{3} \\pi$"
      ],
      "text/plain": [
       "208*sqrt(3)*pi"
      ]
     },
     "execution_count": 252,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,2*sqrt(3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 254,
   "id": "46fa58e6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a x \\left(\\frac{2 x}{3} + 1\\right) + e^{x}$"
      ],
      "text/plain": [
       "a*x*(2*x/3 + 1) + exp(x)"
      ]
     },
     "execution_count": 254,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=exp(x)+a*x*(Rational(2,3)*x+1)\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 255,
   "id": "c97c38e3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - x \\left(\\frac{2 x}{3} + 1\\right) + e^{x}$"
      ],
      "text/plain": [
       "-x*(2*x/3 + 1) + exp(x)"
      ]
     },
     "execution_count": 255,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(a,-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 256,
   "id": "b17ed1b4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{4 x}{3} + e^{x} - 1$"
      ],
      "text/plain": [
       "-4*x/3 + exp(x) - 1"
      ]
     },
     "execution_count": 256,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr.subs(a,-1),x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 260,
   "id": "0b7990e7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAasAAAEeCAYAAAA0FjqrAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAzoklEQVR4nO3de1hUdeI/8PcZhvtNQEbBQRFHUe7KoKhJq2uIZihZrpdUJEPUrPbXVtvu1qZbX6222k1KJS+ZGVR2IU1IW2+J5jiImqCJigqICIiA3Jk5vz8s0gREhTkzzPv1PD0yM+cw7/Mc4s058zmfI4iiCCIiImMmkzoAERHR7bCsiIjI6LGsiIjI6LGsiIjI6LGsiIjI6LGsiIjI6LGsiIjI6LGsiIjI6MmlDkBEbRMEQQFgJABPALUAjgPQiqKolzQYkQEJnMGCyDgJgjAawF8BuALIAnAZgA2AAQD6AdgM4C1RFCslC0lkICwrIiMlCMKbAFaIonihhdfkACYCsBBF8QuDhyMyMJYVEREZPQ6wIDJygiBsFATB+YbH3oIg/E/KTESGxrIiMn77ABwUBGGCIAhPANgO4D/SRiIyrNudBuQ5QiIjsG/fPowePRrdu3dHVlYWevbsKXWkm0RFRSE9PV3qGGSahPYsxCMrIiO3ceNGxMXF4aOPPkJsbCwmTJiAo0ePSh3rJqWlpVJHoC6O11kRGbkvvvgC+/btg0KhwPTp0xETE4PY2FhkZWVJHY3IYHgakMgENTQ0wMrKSuoYzdRqNbRardQxyDTxNCCRKXv11Vdx5cqVFl+zsrLCzp07sXXrVgOnIpIGTwMSGanAwEA89NBDsLGxwZAhQ+Du7o66ujrk5ubiyJEjGDt2LP72t79JHZPIIFhWREZq8+bNyMjIwBtvvAGFQoGioiI4OTnhscceQ1JSEmxtbaWOSGQwLCsiI5WZmYnz589j06ZN2LVr102v1dbWsqzIrLCsiIxUQkICoqKicPbsWajV6ubnRVGEIAg4e/ashOmIDIujAYmM3IIFC7By5UqpY7SJowHpHhjPaMCci5WoqGk0xFsRdTnGXlREhtDpZVVV14gZa37Egk2ZaNTxXnFERHTnOr2sHG0s8dKDfth/pgwvfX0cvCUJERHdKYMMsJgSqkReaTUSd52Gj7s94iP6GeJtiYioizDYaMD/98AA5JVWY1naSXi72SPS37hmjSYiIuNlsOmWZDIB/340GEG9nPF0yhEcL6ww1FsTmZ24uDgoFAoEBAS0+Pqbb76JkJAQhISEICAgABYWFs1TO3l7eyMwMBAhISE3DZknkpLBh65frqrD5MQM6EXg60Uj0dPZpqPfgsjs7d27Fw4ODpg9ezaOHz/e5rJbtmzBO++8g507dwK4XlZarRbdu3dv9/tx6DrdA+MZun4jhaMN1saGoaquEfM+OoSahiZDRyDq8iIiIuDq6tquZZOTkzF9+vROTkR0bySZdX2QhxNWzBiMnIuVeCblCPR6jhAkkkJNTQ3S09MxZcqU5ucEQUBkZCRCQ0ORlJTU6rpJSUlQq9VQq9UoKSkxRFwyY5LdImTMwB54aaIftucU4/X0k1LFIDJrW7ZswciRI286CsvIyMDhw4eRlpaG9957D3v37m1x3fj4eGi1Wmi1Wri7uxsqMpkpSe9nFTvCG7PC+2D13rNI0VyQMgqRWUpJSbnlFKCnpycAQKFQICYmBhqNRopoRDeRtKwEQcA/H/LD/QPc8Y+vjyPjdKmUcYjMSkVFBfbs2YNJkyY1P1ddXY2qqqrmr7dv397qiEIiQ5J81nW5hQyJMwbjkZUHkPBxJr5aOAIqhaPUsYhM2vTp07F7926UlpZCqVRiyZIlaGy8Pj9nQkICAOCrr75CZGQk7O3tm9crLi5GTEwMAKCpqQkzZsxAVFSU4TeA6HeMZtb1gvIaTH5vP2ytZPh64Ui4OVgb6q2J6B5x6DrdA+Mcut4apYsd1sxR43JlPeI3ZqKuUSd1JCIiMhJGU1YAEOLVDe/8KQSZ58vx3OZjHNJOREQAjKysAGBCoAdeiBqILUcv4j/fn5I6DhERGQHJB1i0JOF+H5wrrca7O0+jj5s9poQqpY5EREQSMsqyEgQBr8YEIL+8Bn/98hh6udgi3MdN6lhERCQRozsN+CtLCxlWPhaKPm72mL8xE2dKrkkdiYiIJGK0ZQUAzraWWB8bBrlMwNz1h1B2rV7qSEREJAGjLisA8HK1wwdz1CiurOOQdiIiM2X0ZQUAQ3q74O2pHNJORGSuTKKsAODBIA88H+WLLUcv4u0dHNJORGROjHI0YGsW3N8P50trkLjrNHq72mFqmJfUkYiIyABMqqx+HdJ+saIWf/vqJ/RyscVIVftvvU1ERKbJZE4D/srSQob3Zg5BP3cHJHycidziKqkjERFRJzO5sgIAJxtLrJsbBhtLC8SuP4TLVXVSRyIiok5kkmUFAL262WLdnDBcqW7AExu0qG3gkHYioq7KZMsKAAKVznh3+mAcK6zA0ylZ0HFIOxFRl2TSZQUAD/j1wD8n+mF7TjFe+/aE1HGIiKgTmNRowNbEjuyLC1dqsS4jD16utpg7sq/UkYiIqAN1ibICgL8/OAgF5TVYujUHvbrZItK/p9SRiIiog5j8acBfWcgE/HfaYAT1csZTKVk4mn9V6khERNRBukxZAYCtlQXWzAlDdwdrPL5Bi/wrNVJHIiKiDtClygoA3B2t8eHcMDQ06TD3w0OoqGmUOhKRwcXFxUGhUCAgIKDF13fv3g1nZ2eEhIQgJCQES5cubX4tPT0dvr6+UKlUWL58uaEiE7Wpy5UVAKgUjkiarcaFshrEb9SivonXYJF5iY2NRXp6epvLjBo1CkeOHMGRI0fw8ssvAwB0Oh0WLVqEtLQ05OTkIDk5GTk5OYaITNSmLllWABDu44Y3Hw3CwbwreGHzMYgir8Ei8xEREQFXV9c7Xk+j0UClUsHHxwdWVlaYNm0aUlNTOyEh0Z3psmUFAJNCeuG5cb74+shF/Hv7z1LHITIqBw4cQHBwMMaPH4/s7GwAQGFhIby8frubgVKpRGFhoVQRiZp1maHrrVn4h34oKK/Fe7vOoFc3O8wY1lvqSESSGzJkCM6fPw8HBwds27YNkydPRm5ubotnIARBaPF7JCUlISkpCQBQUlLSqXmJuvSRFXD9f7R/TfLHaF93vJR6HLtOXpY6EpHknJyc4ODgAACYMGECGhsbUVpaCqVSifz8/OblCgoK4Onp2eL3iI+Ph1arhVarhbu7u0Fyk/nq8mUFAHILGRJnDMEgD0cs+uQwfiqokDoSkaQuXbrUfBSl0Wig1+vh5uaGsLAw5ObmIi8vDw0NDUhJSUF0dLTEaYnM4DTgr+yt5Vg3Jwwx7+9H3IZD+HLBCHi52kkdi6hTTJ8+Hbt3724+WlqyZAkaG69fxpGQkIDNmzdj5cqVkMvlsLW1RUpKCgRBgFwuR2JiIsaNGwedToe4uDj4+/tLvDVEgHCbUXJdbghdbnEVHl65HwpHa3y5YCSc7SyljkRk8tRqNbRardQxyDS1/KHo75jFacAb9e/hiKRZauRfqcUTG7Woa+Q1WERExs7sygoAhve7fg2WJu8Knv38KPS8DxYRkVEzm8+sfm9SSC8UVdRhedpJ9Opmi79NGCR1JCIiaoXZlhUAzI/wwcWrtUjaexaezjaI5X2wiIiMklmXlSAI+OdD/iiqqMOSrTno6WyLqADeB4uIyNiY5WdWN7KQCXh32mCEeHXD0ylZyDx/RepIRET0O2ZfVsAv98GarYaHsw0e36DFmZJrUkciIqIbsKx+4eZgjQ1xQyGXCZizToPLVXVSRyIiol+wrG7Qx80e62LDcKW6AXEfHsK1+iapIxEREVhWtwhSdsN7M4fgRFEVFm46jEadXupIRERmj2XVgtG+CiyLCcTeUyV48cufeONGIiKJmfXQ9bZMDfPCxYpa/Of7XHg42+DZSF+pIxERmS2WVRue/mN/FFfWYcXO0+jhZIPHwvtIHYmIyCyxrNpw/caNASipqsfLqcfh7miNcf68aJiIyND4mdVtyC1kWDF9CIK9uuGp5Cxoz/GiYSIiQ2NZtYOtlQXWzglDr262eHyDFqcvV0kdiYjIrLCs2snV3gob4obCSi7DnHWHcKmCFw0TERkKy+oOeLnaYX1sGCpqGxG7XoOK2kapIxERmQWW1R0K6OWM1bNCcabkGp74iHcaJiIyBJbVXRip6o63poZAk3cFz6QcgY53GiYi6lQsq7sUHeyJlyf6IT37El75JpuzXBARdSJeZ3UP4u7ri+KqOqzecxYKR2ss/mN/qSMREXVJPLK6R3+NGoiHh/TCWztOIUVzQeo4RACAuLg4KBQKBAQEtPj6pk2bEBQUhKCgIIwYMQJHjx5tfs3b2xuBgYEICQmBWq02VGSiNrGs7pEgCHh9ShDuH+COv331E7ZnX5I6EhFiY2ORnp7e6ut9+/bFnj17cOzYMbz00kuIj4+/6fVdu3bhyJEj0Gq1nR2VqF1YVh3A0kKG92cOQaCyGxYnZ0GTx1kuSFoRERFwdXVt9fURI0bAxcUFABAeHo6CggJDRSO6KyyrDmJvLcf62DD0crHF4xsO4eSlSqkjEbXL2rVrMX78+ObHgiAgMjISoaGhSEpKanW9pKQkqNVqqNVqlJSUGCIqmTHhNqPYOMTtDhWU12DKyv0QReCLBSPg5WondSQyU+fOncPEiRNx/PjxVpfZtWsXFi5ciH379sHNzQ0AcPHiRXh6euLy5ct44IEHsGLFCkRERLT5Xmq1mqcM6W4J7VmIR1YdTOlih4/ihqGuUYc56zQou1YvdSSiFh07dgzz5s1Dampqc1EBgKenJwBAoVAgJiYGGo1GqohEzVhWncC3pyPWxoah8Got4j48hOr6JqkjEd3kwoULePjhh7Fx40YMGDCg+fnq6mpUVVU1f719+/ZWRxQSGRKvs+okYd6uSJwxBPM3apHwcSbWzgmDlZx/G5BhTJ8+Hbt370ZpaSmUSiWWLFmCxsbrc1kmJCRg6dKlKCsrw8KFCwEAcrkcWq0WxcXFiImJAQA0NTVhxowZiIqKkmw7iH7Fz6w62WfafDy/+RgmBnngv9MGw0LWrtOzRCaFn1nRPWjXL0UeWXWyqWovlFc3YFnaSbjYWWHpJH8IAguLiOhOsKwMYP79/VBW3YCkvWfh5mCFZ8YOuP1KRETUjGVlIC+OH4gr1Q34z/e5cLO3wqzh3lJHIiIyGSwrAxEEAcsfDsTVmka8/E02nO2sEB3sKXUsIiKTwOFpBiS3kCFxxmCE9XHFs58dwZ5TvOqfiKg9WFYGZmNpgQ/mqKFSOCJhYyYyz5dLHYmIyOixrCTgbGuJDXFhUDhZI+7DQ/j5UpXUkYiIjBrLSiIKRxt8/Pgw2FjKMGvtQVwoq5E6EhGR0WJZScjL9fo8gvVNesxadxCXq+qkjkREZJRYVhLz7emI9XPDUFJVj9lrNaiobZQ6EhGR0WFZGYEhvV2welYozpRcQ9yHh1DTwIlviYhuxLIyEqP6u+O/0wYj60I5Ej4+jIYmvdSRiIiMBsvKiEwI9MCyhwOx91QJ/vzpEej0nEeYiAjgDBZG509hvVFZ24TXtp2Ag7Ucy6cEcuJbIjJ7LCsj9ESEDypqG5G46zSc7Szx4viBLCwiMmssKyP1bOQAVNY1ImnvWTjZyPHkmP5SRyIikgzLykgJgoBXHvLHtbom/Hv7KdhbyzF3ZF+pYxERSYJlZcRkMgFvPBKEa/VNWLIlBw7Wcjyq9pI6FhGRwXE0oJGTW8iwYsZgjOrfHS98cQxpPxVJHYmIyOBYVibAWm6B1bNCMbi3C55KycLuny9LHYmIyKBYVibCzkqOdbFh6K9wRMLHmdDkXZE6EhGRwbCsTIizrSU+enwoPLvZIu7DQzhWcFXqSEREBsGyMjHdHayxad4wdLOzxOx1Gpy8VCl1JDJCcXFxUCgUCAgIaPF1URTx1FNPQaVSISgoCIcPH25+LT09Hb6+vlCpVFi+fLmhIhO1iWVlgjycbfHJvHDYyC3w2BoNzpZckzoSGZnY2Fikp6e3+npaWhpyc3ORm5uLpKQkLFiwAACg0+mwaNEipKWlIScnB8nJycjJyTFUbKJWsaxMVG83O3w8bxhEUcTMNQeRf4U3b6TfREREwNXVtdXXU1NTMXv2bAiCgPDwcFy9ehVFRUXQaDRQqVTw8fGBlZUVpk2bhtTUVAMmJ2oZy8qEqRQO2Pj4MFTXN2HmmoMoruTNG6l9CgsL4eX12zV7SqUShYWFrT7fkqSkJKjVaqjVapSUlHR6ZjJvLCsT5+fphA1xQ1F2rR4z1xxE2bV6qSORCRDFW2f0FwSh1edbEh8fD61WC61WC3d39w7PSHQjllUXMLi3C9bGhqGgvAaz1mpQUcO7DVPblEol8vPzmx8XFBTA09Oz1eeJpMay6iLCfdyQNEuN05evYfa6g6iqY2FR66Kjo/HRRx9BFEX8+OOPcHZ2hoeHB8LCwpCbm4u8vDw0NDQgJSUF0dHRUscl4tyAXUnEAHe8P3MIEj7OxNz1h7AhbijsrbmLzdH06dOxe/dulJaWQqlUYsmSJWhsvP4HTEJCAiZMmIBt27ZBpVLBzs4O69evBwDI5XIkJiZi3Lhx0Ol0iIuLg7+/v5SbQgQAEFo6R30D3qrWBG37qQhPfnIYw/q6Yf3cMNhYWkgdibo4tVoNrVYrdQwyTe26WR9PA3ZBEwI98PbUEPyYV4b4jZmob9JJHYmI6J6wrLqoyYN74fWHg7D3VAkWbcpCo04vdSQiorvGsurCpoZ54V+T/PH9iWI8nZKFJhYWEZkofvrexc0a7o36Jj1e/fYE5LKjeOdPIbCQtesUMRGR0WBZmYF5o3zQqBPxevpJyGUC3nw0mIVFRCaFZWUmFvyhH5p0ery14xQsZAJenxIEGQuLiEwEy8qMLP5jfzTqRbz7v1zILWR4bXIAC4uITALLysz8eWx/NOn0eH/3GchlApZO8m917jciImPBsjIzgiDguXG+aNKLSNp7FnILAS9P9GNhEZFRY1mZIUEQ8OL4gWjU6bE+4xzkMgF/mzCIhUVERotlZaYE4foRlV4v4oMf8poLjIVFRMaIZWXGBEHAK9H+0ItA0t6zEAD8lYVFREaIZWXmBOH6IAsRIlbvPQtBEPBClC8Li4iMCsuKrhdWdABEEVi15wwEAXh+HAuLiIwHy4oAADKZgH9NCoAIYOXuMxAAPMfCIiIjwbKiZjKZgFcnXT/Cen/3GYjgERYRGQeWFd1EJhOuz2whXD/C0osi/hrFQRdEJC2WFd1CJhPw6uQAyAQBq/echSiCw9qJSFIsK2rRr6MEZcL1Ye16vYi/P8gLh4lIGiwratWv12HJZALW7MuDThQ5NRMRSYJlRW36daYLmSBg7b48NOlELPmlwIiIDIW3tafbEgQB/3hwEObf74ONP57H37/+CXq9KHUsuo309HT4+vpCpVJh+fLlt7z+5ptvIiQkBCEhIQgICICFhQWuXLkCAPD29kZgYCBCQkKgVqsNHZ3oFoIotvlLh7+RqJkoinh7xyms2Hkaj4Qq8fqUIN5x2EjpdDoMGDAAO3bsgFKpRFhYGJKTk+Hn59fi8lu2bME777yDnTt3ArheVlqtFt27d2/X+6nVami12g7LT2alXb9EeBqQ2k0QBDwb6Qu5TIZ3vj+FRp0ebz0aDLkFD9CNjUajgUqlgo+PDwBg2rRpSE1NbbWskpOTMX36dENGJLoj/C1Dd+zpsf3x3DhfpB65iKdTjqBRp5c6Ev1OYWEhvLy8mh8rlUoUFha2uGxNTQ3S09MxZcqU5ucEQUBkZCRCQ0ORlJTU6XmJbodHVnRXFo1WwcpChte2nUCjTo8VMwbDWm4hdSz6RUun91sbxbllyxaMHDkSrq6uzc9lZGTA09MTly9fxgMPPICBAwciIiLipvWSkpKai6ykpKQD0xPdikdWdNeeiPDBkmh/bM8pRvxHmahr1EkdiX6hVCqRn5/f/LigoACenp4tLpuSknLLKcBfl1UoFIiJiYFGo7llvfj4eGi1Wmi1Wri7u3dgeqJbsazonswZ4Y3XpwRib24J5q4/hOr6JqkjEYCwsDDk5uYiLy8PDQ0NSElJQXR09C3LVVRUYM+ePZg0aVLzc9XV1aiqqmr+evv27QgICDBYdqKW8DQg3bM/hfWGjaUF/t9nRzFr7UGsnzsUzraWUscya3K5HImJiRg3bhx0Oh3i4uLg7++PVatWAQASEhIAAF999RUiIyNhb2/fvG5xcTFiYmIAAE1NTZgxYwaioqIMvxFEN+DQdeow6ceLsDg5C749HbExbhhc7K2kjkQGwqHrdA/aNXSdpwGpw0QFeCBplhqniq9hWtKPuFxVJ3UkIuoiWFbUoUYPVODD2DDkl9dg6qoDKCivkToSEXUBLCvqcCNU3bHx8aEoq27A1FUHcLbkmtSRiMjEsayoU4T2cUVKfDjqm/SYuvoAThRVSh2JiEwYy4o6jb+nMz6dPxyWFjL8afUBZF0olzoSEZkolhV1KpXCAZ/NHw4XeyvMXHMQ+8+USh2JiEwQy4o6nZerHT6fPxxKF1vErj+E7dmXpI5ERCaGZUUGoXCywafxwzHIwwkLNh3GF5kFUkciIhPCsiKDcbG3wifzhiHcxxXPfn4U6/blSR2JiEwEy4oMyt5ajnWxYYjy74mlW3Pw9o5TLc4QTkR0I5YVGZy13AKJMwZjqlqJd/+Xi39+kw29noVFRK3jRLYkCbmFDK9PCYKLnRVW7z2LsuoGvD01mPfEIqIWsaxIMoIg4MUJg+DmYIX/23YSV2sasHqWGg7W/LEkopvxNCBJLj6iH956NBg/nr2C6Uk/ovRavdSRiMjIsKzIKEwJVeKD2aHIvVyFR1cdQP4VToBLRL9hWZHRGDOwBzbNG4Yr1Q14eOV+zidIRM1YVmRUQvu44vOE4bAQBExdfQAHzpRJHYmIjADLiozOgB6O+GLhCPRwssGcdRpsPXZR6khEJDGWFRmlXt1ssTlhOIK9nPHkJ1lY88NZqSMRkYRYVmS0utlZYePjwzA+oCde/fYEXt2aw4uHicwUy4qMmo2lBRJnDEHsCG+s2ZeHp1KyUN+kkzoWERkYr74ko2chE/DPh/zg4WyDZWknUXqtHqtnqeFsayl1NCIyEB5ZkUkQBAHz7++H/04LQeb5cjy6aj8KynktVlvS09Ph6+sLlUqF5cuX3/L67t274ezsjJCQEISEhGDp0qXtXpfI0HhkRSZlUkgvuDtYY/7HmYh5fz/WzQlDoNJZ6lhGR6fTYdGiRdixYweUSiXCwsIQHR0NPz+/m5YbNWoUtm7delfrEhkSj6zI5IxQdccXC0bAykKGqasP4H8niqWOZHQ0Gg1UKhV8fHxgZWWFadOmITU1tdPXJeosLCsySQN6OOKrRSPQv4cDnvhIi40HzkkdyagUFhbCy8ur+bFSqURhYeEtyx04cADBwcEYP348srOz72jdpKQkqNVqqNVqlJSUdMJWEP2GZUUmS+Fog5T4cIwZ2AMvpWbj1a050HFoOwC0eENLQRBuejxkyBCcP38eR48exeLFizF58uR2rwsA8fHx0Gq10Gq1cHd375jgRK1gWZFJs7OSY/Ws0Oah7fM3ZqK6vknqWJJTKpXIz89vflxQUABPT8+blnFycoKDgwMAYMKECWhsbERpaWm71iUyNJYVmTwLmYBXov2xJNofO08W49FVB1BUUSt1LEmFhYUhNzcXeXl5aGhoQEpKCqKjo29a5tKlS81HURqNBnq9Hm5ubu1al8jQOBqQuow5I7zR280Oiz/JwqTEDKw145GCcrkciYmJGDduHHQ6HeLi4uDv749Vq1YBABISErB582asXLkScrkctra2SElJgSAIra5LJCWhpfPTN+AHAGRyfr5UhbgPD6Gsuh7/+VMIogI8pI7U5anVami1WqljkGm69QPRFvA0IHU5vj2vjxQc2NMJCR8fxvu7T7c4aICITAfLirqkX0cKTgzywBvpP+PPnx5BXSPnFCQyVfzMirosG0sLrJg+GL49HPHWjlM4V1aDpFmhUDjZSB2NiO4Qj6yoSxMEAYv/2B+rHhuCny9VIToxAz8VVEgdi4juEMuKzEJUgAc2LxgOC5mAR1fvx5ajvPswkSlhWZHZ8Pd0RuqTIxHg6YzFyVl4I/0kZ7wgMhEsKzIr3R2ssemJYZg+1Avv7z6DxzccQkVto9SxiOg2WFZkdqzlFlj2cBBeiwnAvtxSTH4vA7nFVVLHIjIJoijih1zDT1zMsiKzNXNYHyTHh6OqrgmT38vAd9mXpI5EZPTW/JCHWWs12HPKsIXFsiKzFubtii2LR6KfwgHzN2bi39/9zM+xiFpx8GwZlqefxPiAnojo392g782yIrPn4WyLz+YPx1S1Eom7TiN2vQbl1Q1SxyIyKpcr6/Bkchb6uNrhjUeCWrxtTGdiWRHh+gXEbzwSjOUPB+Lg2SuYuGIfjhVclToWkVFo1Onx5CdZuFbXhJWPhcLRxtLgGVhWRDeYNrQ3Pk8YDgB4ZNUBfHrogsSJiKT3RvpJaM5dwfIpgfDt6ShJBpYV0e8Ee3XDlsX3Yai3K1744ie8sPkY5xUks7XtpyJ88EMe5gzvg0khvSTLwbIiaoGrvRU2xA3FotH98Kk2H5Pfy8CZkmtSxyIyqDMl1/D85mMI8eqGvz/oJ2kWlhVRKyxkAp4bNxDr54ahuLIO0Sv2IfVIodSxiAyipqEJCz7OhJVchvdnDoGVXNq6YFkR3cZoXwW+fWoUBno44emUI/j7Vz/xtCB1aaIo4sUvf0Lu5Wt4d9pgeHazlToSy4qoPTy72SIlPhzzI3yw6eAFTFm5H+dKq6WORdQp1mWcQ+qRi3j2gQG4z8DXU7WGZUXUTpYWMrw4YRDWzlGjoLwWE1fsw9ZjnL2dupb040V49dscjPPvgYV/UEkdpxnLiugO/XFQD3z71H3o38MBT36Shec3H0V1fZPUsYjuWeb5cjydcgQhXt3wnz8Nhkxm2At/28KyIroLShc7fDZ/OJ4crcLnmQV4aMU+HC/kTR3JdOWVVmPehkPwcLbBmtlq2FpZSB3pJiwrortkaSHDX8b5IvmJcNQ26hDzfgY+2HsWes4tSCam7Fo9YtdrIAgCPpw7FG4O1lJHugXLiugehfu4Ie3pURgzUIHXtp3AnPUaXK6qkzoW0tPT4evrC5VKheXLl9/y+qZNmxAUFISgoCCMGDECR48ebX7N29sbgYGBCAkJgVqtNmRsMrDaBh0e36DFpYo6rJmjhnd3e6kjtUgQxTb/CuSfiETtJIoikjX5WLo1G/ZWcrz5aBDGDOwhSRadTocBAwZgx44dUCqVCAsLQ3JyMvz8fruwc//+/Rg0aBBcXFyQlpaGV155BQcPHgRwvay0Wi26d2/fSDC1Wg2tVtsp20KdR6cXseDjTOw4UYyVM0MRFdBTihjt+mCMR1ZEHUQQBMwY1htbnrwP7o7WiPtQi398/RNqGgw/+EKj0UClUsHHxwdWVlaYNm0aUlNTb1pmxIgRcHFxAQCEh4ejoKDA4DlJOqIo4l9bc7A9pxgvT/STqqjajWVF1MH693DE14tGYt59fbHp4AWM/+8P0J67YtAMhYWF8PLyan6sVCpRWNj67Btr167F+PHjmx8LgoDIyEiEhoYiKSmpxXWSkpKgVquhVqtRUmL4O8fSvVm7Lw8f7j+Heff1xdyRfaWOc1ssK6JOYGNpgX9M9EPyE+HQ6UVMXX0Ay9NOor7JMDNftHR6v7X7D+3atQtr167F66+/3vxcRkYGDh8+jLS0NLz33nvYu3fvLevFx8dDq9VCq9XC3d2948JTp9ucWYBXvz2BCYE98bcJg6SO0y4sK6JOFO7jhvRnIjBV7YVVe85gUmIGsi92/hB3pVKJ/Pz85scFBQXw9PS8Zbljx45h3rx5SE1NhZubW/Pzvy6rUCgQExMDjUbT6ZnJML7ILMBzm49iVP/ueHtqiFFdS9UWlhVRJ3OwlmP5lCCsi1WjrLoBk9/LQOLOXDTq9J32nmFhYcjNzUVeXh4aGhqQkpKC6Ojom5a5cOECHn74YWzcuBEDBgxofr66uhpVVVXNX2/fvh0BAQGdlpUM56usAvxl81GM7NcdH8xWw8bSuK6laotc6gBE5mLMwB7Y/owL/pF6HP/efgppxy/hjUeC4O/p3OHvJZfLkZiYiHHjxkGn0yEuLg7+/v5YtWoVACAhIQFLly5FWVkZFi5c2LyOVqtFcXExYmJiAABNTU2YMWMGoqKiOjwjGdbXWYV49rOjGO7jZnJFBXDoOpEk0n4qwkupx3G1phEL/9APi8aoYC03rV8eN+LQdeOWeqQQf/70CIb1dcO62DBjm52CQ9eJjNX4QA/s+PP9iA72xLs7T2Piu/uQdaFc6ljUBX1z9CL+/OkRDO3rirWxxjeNUnuxrIgk4mJvhbf/FIL1sWG4Vt+Eh1fuxz9Tj6OqrlHqaNRFfJFZgGdSsqD2dsW62DDYWZnuJz8sKyKJjR6owPY/R2B2eB989ON5jH17D9J+Kmpx+DlRe4iiiPd2ncaznx/F8H5uWG/iRQWwrIiMgqONJZZMCsBXC0fC1d4aCzYdxrwNWhSU10gdjUyMTi/i5dRsvPndz5gU4on1sUNhb23aRQVwgAWR0WnS6fHh/nN4a/spAMAzY/tj7si+sJIb79+WHGBhHOoadXg6JQvfZRdjfoQPXogaaArXUbUrIMuKyEgVlNfglW+y8f2Jy+jnbo9Xov0xqr9xzhTBspLe1ZoGzNugReaFcrz0oB/i7jP+KZR+wdGARKZM6WKHNXPCsC5WjSa9iFlrNUjYmIn8Kzw1SDcrKK/BlJX7caygAonTh5hSUbUbj6yITEBdow5r9+Uhcedp6EURC/7QDwn39zOaCzt5ZCWdA2fKsDj5MOqb9PhgthrhPm63X8m48DQgUVdz8Wot/m/bCWw9VoRe3WzxfJQvHgrylPxzCZaV4YmiiA9+OIvX03+Gt5sdVs8KhUrhKHWsu8GyIuqqDpwpw7+25iCnqBLBSmf8/UE/DO3rKlkelpVhXatvwnOfH0Xa8UuYENgTbzwSDAfTHfHHsiLqyvR6EV9mFeLf3/2MS5V1GOffAy9EDYSPu4PBs7CsDOf05SrM35iJvNJq/HX8QDwxyqfV27+YCJYVkTmobdBh7b6zWLn7DOqb9Jg+tDcWj1FB4WRjsAwsK8P49lgRntt8FHZWFnh3+mCM6Ndd6kgdgWVFZE5Kqurxn+9P4dND+ZBbCJgzwhsJEf3gYm/V6e/NsupclXWN+NeWHHyeWYAhvbvh/Zmh6OlsuD9GOhnLisgcnS+rxn++z8XXRwrhYCXHvFE+iLvPG442lp32niyrzrMvtxTPbz6KS5V1SLi/H54ZO8CoLxC/CywrInP286UqvL3jZ3yXXQxnW0vMHemNuSP6wtmu40uLZdXxquubsCztBD7+8QJ83O3x1qPBGNzbRepYnYFlRUTAsYKrWLHzNHbkFMPRWo7ZI/rg8ft84NqBpwdZVh3r4NkyPLf5GPLLa/D4yL74yzhfo7mmrhOwrIjoNzkXK5G4Kxdpxy/B1tICM4b2Rtx9feHZzfaevzfLqmOUVzfg39t/xieaC/ByscO/Hw2W9JIEA2FZEdGtcourkLjrNLYeK4IAYGKQB+aN8kFAL+e7/p4sq3uj04v4RHMBb23/GVV1TZg9vA/+EunbJWZLbweWFRG1rqC8BuszziFFcwHVDTqMVLlh3igf3N/f/Y5nxGBZ3b1D567gn6nZyCmqRLiPK5ZEB8C3p0nORHG3WFZEdHsVtY1I1lzAhxnncKmyDn2722PmsN54JFSJbnbt+1yLZXXnsi9W4J0dufj+RDE8nG3w9wcH4cFAD1O/wPdusKyIqP0amvRIO16EjQfOQ3u+HNZyGaKDPfFYeB8Ee3Vrc12WVfv9fKkK7+w4hfTsS3CykeOJUT54fFRfk7+T7z3gLUKIzFl6ejp8fX2hUqmwfPnyW14XRRFPPfUUVCoVgoKCcPzYEUwK6YXNC0bgH2oZGk/9gM8PnsGk9zLw4Ls/YH1GHsqu1UuwJV3D6cvXsDg5C1H/3YuM06V4+o/98cMLY7D4j/3NuajajUdWRF2QTqfDgAEDsGPHDiiVSoSFhSE5ORl+fn7Ny2zbtg0rVqzAtm3bcPDgQTz99NM4ePDgTet2694TI2b+GcpRj+D0lQbIZQJGD1TgkVAlRvsqmi9O5ZFVy0RRxP4zZVi3Lw87f74MW0sLzB3pjSdG+bT7FKsZaNeRFeucqAvSaDRQqVTw8fEBAEybNg2pqak3lVVqaipmz54NQRAQHh6Oq1evoqioCOfOnbtp3TkjvAGdFonPLMIXmQX4KusiduQUw8XOElEBPTE+wIN/1f5OTUMTthy9iHX7zuHn4iq42Vth8Zj+mDO8D9wcrKWOZ5JYVkRdUGFhIby8vJofK5VKHDx48LbLFBYWtrruwJ5O+PuDfnghaiB+yC3FV1mF+ObIRSRr8nH5YiX+8vlRTAjsiZGq7rCWd9kLWFsliiKy8q/ic20+thwtwrX6Jgzs6Yg3HglCdLBnV76o1yDaPA0YFRUllpaWdsgblZSUwN3dvUO+lynhdpsXY9nu8vJyVFZWok+fPgCAsrIyVFdXo3fv3s3L5ObmwsPDAw4O128pcurUKSiVStTX1992XeD6tpaWlkEvt0ZDTRWs3L2hF0XIBAEO1nI42lz/z9Ki6340XlJSAntnV1TWNaKythH1TXrIBAHOtpZwsbPsstdJdeTPeWZm5neiKEbdbjmDfWZlrue0ud3mxVi2+8CBA3jllVfw3XffAQCWLVsGAHjxxRebl5k/fz7+8Ic/YPr06QAAX19f7N69G+fOnbvtur9nb2+PKxWV2H+6DN9lX8KeUyUoqqgDAAzo4YD7B7hjhKo7Qvu4wKkTJ9Q1hIYmPQ6cLcP27EtI3nscemsnyGUCwn3cMDHIAxODPU35Rojt0sE/5/zMishchYWFITc3F3l5eejVqxdSUlLwySef3LRMdHQ0EhMTMW3aNBw8eBDOzs7w8PCAu7v7bddtibXcAqMHKjB6oAKiKCL38jXsPVWCPadKsGH/eXzwQx5kAjCwpxOG9nWF2tsFAZ7O6O1qd8cXIRtSXaMOPxVWIPN8OQ6fL8eBM2Woqm+CnZUF5Ffz8cZTMzHaV9EpEwTTb1hWRF2QXC5HYmIixo0bB51Oh7i4OPj7+2PVqlUAgISEBEyYMAHbtm2DSqWCnZ0d1q9f3+a6d0IQBAzo4YgBPRwxb5QPaht0yLpQDs25Kzh07go+PZSPD/efAwA4WMsxyMMRfh5O8PN0gp+HM/r3cJDkMx6dXkRBeQ2OF1ZeL6cL5ci+WIFG3fWTTH2722NCoAci/XtgpKo77hv+D0we/LzBc5ojg50GTEpKQnx8fEd9O5PB7TYv5rrdffr0wfnz59u9fKNOj5NFVcgpqkD2xUrkXKzEiaJKVDfoAACCALg7WKOXiy08u9lC2c0WvVxs0avb9ccudlawtbKAraVFu+/t1KjTo6ZBh5qGJpRda8DFq7UoqqjDxYpaFJTX4szlazhbWo2GJj0AwFouQ7BXNwzp7YLQPi4Y0rvbLSP5zHV/d/B2cwYLIjKMjvgMQ68XceFKDXKKKnGquAqF5bW4WFF7/d+rdWjQ6VtcTy4TYGtpARsrC9j9UmCWFjLUNupQ26BDdUMTaup1ra5vaSHAw9kW/dztoVI4QKVwwMCeThjk4dTVbnJorPiZFRGZDplMgHd3e3j/cqrtRnq9iNLqehSW16Lwai0qa5t+KaNf/9WjtrEJtQ061Dbq0NCkh62VBeys5LC3soDtL//aWcthZ2UBFzsreHazgYezLdzsrYz6MzP6hSiKbf131/7yl7+Ivr6+YmBgoDh58mSxvLy8xeXS0tLEAQMGiP369ROXLVt2L29pFD777DPRz89PFARBPHToUKvL9enTRwwICBCDg4PF0NBQAybsHO3d7q62v8vKysSxY8eKKpVKHDt2rHjlypUWl+sq+7u1/ffrNun1enHx4sViv379xMDAQDEzM1OqqB3qdj+3u3btEp2cnMTg4GAxODhYXLJkiQQpO97cuXNFd3d30d/fv8XXO2h/366HIIpi55XVd999JzY2NoqiKIrPP/+8+Pzzz9+yTFNTk+jj4yOeOXNGrK+vF4OCgsTs7Ox7eVvJ5eTkiCdPnhTvv//+25ZVSUmJAZN1rvZsd1fc388991zzL69ly5a1+HMuil1jf7e1/34tq2+//VaMiooS9Xq9eODAAXHo0KFSRu4Q7fm53bVrl/jggw9KlLDz7NmzR8zMzGy1rDpof7errDrthGxkZCTk8utnGcPDw1FQUHDLMjdOCWNlZdU8JYwpGzRoEHx9faWOYXDt2e6uuL9TU1MxZ84cAMCcOXPw9ddfSxuoE7Vn/7U2hZMp64o/t+0VEREBV9fW71RsyP1tkE8P161bh/Hjx9/yfGvTvZgDQRAQGRmJ0NBQJCUlSR3HILri/i4uLoaHx/XPVzw8PHD58uUWl+sK+7s9+68r7uP2btOBAwcQHByM8ePHIzs725ARJWPI/X1PAyzGjh2LS5cu3fL8a6+9hkmTJjV/LZfLMXPmzFuWE1sYiWgKNx5rz3bfTkZGBjw9PXH58mU88MADGDhwICIiIjo6aoe61+3uivu7vUxxf/9ee/afqe7jtrRnm4YMGYLz58/DwcEB27Ztw+TJk5Gbm2uoiJIx5P6+p7L6/vvv23x9w4YN2Lp1K/73v/+1uAFKpRL5+fnNjwsKCuDp6XkvkQzidtvdHr9up0KhQExMDDQajdH/8rrX7e6K+7tHjx4oKiqCh4cHioqKoFAoWlzOFPf377Vn/5nqPm5Le7bJycmp+esJEyZg4cKFKC0tRffu3Q2WUwqG3N+ddhowPT0dr7/+Or755hvY2dm1uMyNU8I0NDQgJSUF0dHRnRXJaFRXV6Oqqqr56+3btyMgIEDiVJ2vK+7v6OhobNiwAcD1P85aOsLsKvu7PfsvOjoaH330EURRxI8//tg8hZMpa892X7p0qfkoQ6PRQK/Xw83NTYq4BmXQ/X2bERh3rV+/fqJSqWweyjl//nxRFEWxsLBQHD9+fPNy3377rdi/f3/Rx8dHfPXVV+/lLY3Cl19+Kfbq1Uu0srISFQqFGBkZKYrizdt95swZMSgoSAwKChL9/PzMZrtFsevt79LSUnHMmDGiSqUSx4wZI5aVlYmi2HX3d0v7b+XKlWLv3r1FUbw+lHnhwoWij4+PGBAQ0OaIWFPS2navXLlSFEVRXLFihejn5ycGBQWJw4YNEzMyMqSM22GmTZsm9uzZU5TL5WKvXr3ENWvW3LTdHbS/2zUakDNYENE9M5bZ5skktetDLs4lQkRERu92R1ZERLclCEK62I4b6BHdLZYVEREZPZ4GJCIio8eyIiIio8eyIiIio8eyIiIio8eyIiIigxIEIUwQhGOCINgIgmAvCEK2IAhtTuvC0YBERGRwgiC8CsAGgC2AAlEUl7W5PMuKiIgMTRAEKwCHANQBGCGKoq6t5XkakIiIpOAKwAGAI64fYbWJR1ZERGRwgiB8AyAFQF8AHqIoPtnW8vd0PysiIqI7JQjCbABNoih+IgiCBYD9giCMEUVxZ6vr8MiKiIiMHT+zIiIio8eyIiIio8eyIiIio8eyIiIio8eyIiIio8eyIiIio8eyIiIio8eyIiIio/f/AX983XEWzJk0AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7f8052a3fa90>"
      ]
     },
     "execution_count": 260,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(diff(expr.subs(a,-1),x),(x,-2,1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 261,
   "id": "3dfd5642",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle e^{x} - \\frac{4}{3}$"
      ],
      "text/plain": [
       "exp(x) - 4/3"
      ]
     },
     "execution_count": 261,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr.subs(a,-1),x,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 270,
   "id": "a49e596b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{4 a x}{3} + a + e^{x}$"
      ],
      "text/plain": [
       "4*a*x/3 + a + exp(x)"
      ]
     },
     "execution_count": 270,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(diff(expr,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 276,
   "id": "757f60c9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{3 e^{x}}{x \\left(2 x + 3\\right)}$"
      ],
      "text/plain": [
       "-3*exp(x)/(x*(2*x + 3))"
      ]
     },
     "execution_count": 276,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(solveset(expr,a))[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 285,
   "id": "ef814399",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{x \\left(2 x + 3\\right) e^{- x}}{3}$"
      ],
      "text/plain": [
       "-x*(2*x + 3)*exp(-x)/3"
      ]
     },
     "execution_count": 285,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_g=factor(1/list(solveset(expr,a))[0])\n",
    "expr_g"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 282,
   "id": "1cd870a6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\left(x + 1\\right) \\left(2 x - 3\\right) e^{- x}}{3}$"
      ],
      "text/plain": [
       "(x + 1)*(2*x - 3)*exp(-x)/3"
      ]
     },
     "execution_count": 282,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr_g,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 283,
   "id": "b6329501",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{e}{3}$"
      ],
      "text/plain": [
       "E/3"
      ]
     },
     "execution_count": 283,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_g.subs(x,-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 284,
   "id": "4111a8e5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{3}{e^{\\frac{3}{2}}}$"
      ],
      "text/plain": [
       "-3*exp(-3/2)"
      ]
     },
     "execution_count": 284,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_g.subs(x,Rational(3,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 286,
   "id": "ffc5a05a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 x^{2} \\log{\\left(x \\right)} - x^{2} + e^{x}$"
      ],
      "text/plain": [
       "2*x**2*log(x) - x**2 + exp(x)"
      ]
     },
     "execution_count": 286,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=exp(x)+2*x**2*ln(x)-x**2\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 287,
   "id": "2102c30f",
   "metadata": {},
   "outputs": [],
   "source": [
    "def function_tangent(expr,x,x0):\n",
    "    eq=Eq(y-expr.subs(x,x0),diff(expr,x).subs(x,x0)*(x-x0))\n",
    "    return simplify(eq.lhs-eq.rhs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 288,
   "id": "b51ede6e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - e x + y + 1$"
      ],
      "text/plain": [
       "-E*x + y + 1"
      ]
     },
     "execution_count": 288,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_tangent(expr,x,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 290,
   "id": "6f0495ab",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7f8010bee130>"
      ]
     },
     "execution_count": 290,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr,(x,1/5,3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 291,
   "id": "7d70f0eb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x - \\log{\\left(x \\right)} + \\frac{e^{x}}{x}$"
      ],
      "text/plain": [
       "x - log(x) + exp(x)/x"
      ]
     },
     "execution_count": 291,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=exp(x)/x-ln(x)+x\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 294,
   "id": "ba1f1b1e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\left(x - 1\\right) \\left(x + e^{x}\\right)}{x^{2}}$"
      ],
      "text/plain": [
       "(x - 1)*(x + exp(x))/x**2"
      ]
     },
     "execution_count": 294,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 295,
   "id": "f3266fcf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x \\log{\\left(x \\right)} - x + 1$"
      ],
      "text/plain": [
       "x*log(x) - x + 1"
      ]
     },
     "execution_count": 295,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=x*ln(x)-x+1\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 296,
   "id": "56ba3cd4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x \\log{\\left(x \\right)} - x - \\frac{\\log{\\left(\\frac{1}{x} \\right)}}{x} + \\frac{1}{x}$"
      ],
      "text/plain": [
       "x*log(x) - x - log(1/x)/x + 1/x"
      ]
     },
     "execution_count": 296,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_f=expr-expr.subs(x,1/x)\n",
    "expr_f"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 297,
   "id": "bb59fc63",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\log{\\left(x \\right)} + \\frac{\\log{\\left(\\frac{1}{x} \\right)}}{x^{2}}$"
      ],
      "text/plain": [
       "log(x) + log(1/x)/x**2"
      ]
     },
     "execution_count": 297,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr_f,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 300,
   "id": "e4fe5f74",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 300,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "EmptySet in FiniteSet(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "68e44189",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.abc import a,b,c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "c4f63b54",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a x^{3} + x^{4} - 1$"
      ],
      "text/plain": [
       "a*x**3 + x**4 - 1"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=x**4+a*x**3-1\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "92bcb4d3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3 a m^{2} + 4 m^{3} = -5$"
      ],
      "text/plain": [
       "Eq(3*a*m**2 + 4*m**3, -5)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Eq(diff(expr,x).subs(x,m),-5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "5e6db667",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a m^{3} + m^{4} - 1 = 2 - 5 m$"
      ],
      "text/plain": [
       "Eq(a*m**3 + m**4 - 1, 2 - 5*m)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Eq(expr.subs(x,m),-5*m+2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "c4384914",
   "metadata": {},
   "outputs": [],
   "source": [
    "answer=Eq(diff(expr,x).subs(x,m),-5).subs(a,list(solveset(Eq(expr.subs(x,m),-5*m+2),a))[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "941a740e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4 m^{3} - \\frac{3 \\left(m^{4} + 5 m - 3\\right)}{m} = -5$"
      ],
      "text/plain": [
       "Eq(4*m**3 - 3*(m**4 + 5*m - 3)/m, -5)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "answer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "196dd431",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle m^{4} - 10 m + 9$"
      ],
      "text/plain": [
       "m**4 - 10*m + 9"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify((answer.lhs-answer.rhs)*m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "2ac1ae81",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\frac{4}{3}, \\frac{56}{3}\\right]$"
      ],
      "text/plain": [
       "Interval(4/3, 56/3)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(x**3/3+4*x**2-9*x+6,x,Interval(-1,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "04683302",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{e\\right\\}$"
      ],
      "text/plain": [
       "{E}"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(diff(ln(x)/x,x),x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "14967a0b",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7fc6710e0220>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(ln(x)/x,(x,0.2,6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "3f9de84d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{e^{x}}{a + x}$"
      ],
      "text/plain": [
       "exp(x)/(a + x)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=exp(x)/(a+x)\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "f38b7745",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{e^{x}}{a + x} - \\frac{e^{x}}{\\left(a + x\\right)^{2}}$"
      ],
      "text/plain": [
       "exp(x)/(a + x) - exp(x)/(a + x)**2"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(diff(expr,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "4b7ea305",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{1\\right\\}$"
      ],
      "text/plain": [
       "{1}"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(diff(expr,x).subs(x,1)-exp(1)/4,a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "4c5e97a3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x^{2}}{2} - 4 \\log{\\left(x \\right)} - \\frac{1}{2}$"
      ],
      "text/plain": [
       "x**2/2 - 4*log(x) - 1/2"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=x**2/2-4*ln(x)-Rational(1,2)\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "ca5e9b7c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{1\\right\\}$"
      ],
      "text/plain": [
       "{1}"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(diff(expr,x)+3,x,Interval.open(0,oo))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "58b914cd",
   "metadata": {},
   "outputs": [],
   "source": [
    "k=symbols(\"k\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "a1886114",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle k x^{3} - 3 x^{2} + 1$"
      ],
      "text/plain": [
       "k*x**3 - 3*x**2 + 1"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=k*x**3-3*x**2+1\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "e9e6b8db",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3 k x^{2} - 6 x$"
      ],
      "text/plain": [
       "3*k*x**2 - 6*x"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "b30e5cb3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{0, \\frac{2}{k}\\right\\}$"
      ],
      "text/plain": [
       "{0, 2/k}"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(diff(expr,x),x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "880c67fb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 1 - \\frac{4}{k^{2}}$"
      ],
      "text/plain": [
       "1 - 4/k**2"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,2/k)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "58e99eba",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(2, \\infty\\right)$"
      ],
      "text/plain": [
       "Interval.open(2, oo)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(expr.subs(x,2/k)>0,k,Interval.Ropen(0,oo))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "822e7b3f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x^{3}}{3} - x + 2$"
      ],
      "text/plain": [
       "x**3/3 - x + 2"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr=x**3/3-x+2\n",
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "333d750f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4$"
      ],
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr+expr.subs(x,-x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "99c560ef",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[-1, \\infty\\right)$"
      ],
      "text/plain": [
       "Interval(-1, oo)"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(diff(expr,x),x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "1a5f294f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{4}{3}$"
      ],
      "text/plain": [
       "4/3"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "2dae4432",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x7fc660a08f40>"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr,(x,-5,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "08efc566",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2^{n} n}{2}$"
      ],
      "text/plain": [
       "2**n*n/2"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rsolve(f(n+1)-2*f(n)-2**n,f(n),{f(1):1})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "066aea7c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle n \\left(\\frac{n}{2} - \\frac{1}{2}\\right)$"
      ],
      "text/plain": [
       "n*(n/2 - 1/2)"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rsolve(f(n+1)-f(n)-n,f(n),{f(1):0})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "328d08bb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 11.3577471745351$"
      ],
      "text/plain": [
       "11.3577471745351"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "N(2/(log(3,10)-log(2,10)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "933fbf15",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "11.363636363636365"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "2/(0.477-0.301)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "2612ce8e",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on class SeqFormula in module sympy.series.sequences:\n",
      "\n",
      "class SeqFormula(SeqExpr)\n",
      " |  SeqFormula(formula, limits=None)\n",
      " |  \n",
      " |  Represents sequence based on a formula.\n",
      " |  \n",
      " |  Elements are generated using a formula.\n",
      " |  \n",
      " |  Examples\n",
      " |  ========\n",
      " |  \n",
      " |  >>> from sympy import SeqFormula, oo, Symbol\n",
      " |  >>> n = Symbol('n')\n",
      " |  >>> s = SeqFormula(n**2, (n, 0, 5))\n",
      " |  >>> s.formula\n",
      " |  n**2\n",
      " |  \n",
      " |  For value at a particular point\n",
      " |  \n",
      " |  >>> s.coeff(3)\n",
      " |  9\n",
      " |  \n",
      " |  supports slicing\n",
      " |  \n",
      " |  >>> s[:]\n",
      " |  [0, 1, 4, 9, 16, 25]\n",
      " |  \n",
      " |  iterable\n",
      " |  \n",
      " |  >>> list(s)\n",
      " |  [0, 1, 4, 9, 16, 25]\n",
      " |  \n",
      " |  sequence starts from negative infinity\n",
      " |  \n",
      " |  >>> SeqFormula(n**2, (-oo, 0))[0:6]\n",
      " |  [0, 1, 4, 9, 16, 25]\n",
      " |  \n",
      " |  See Also\n",
      " |  ========\n",
      " |  \n",
      " |  sympy.series.sequences.SeqPer\n",
      " |  \n",
      " |  Method resolution order:\n",
      " |      SeqFormula\n",
      " |      SeqExpr\n",
      " |      SeqBase\n",
      " |      sympy.core.basic.Basic\n",
      " |      sympy.printing.defaults.Printable\n",
      " |      builtins.object\n",
      " |  \n",
      " |  Methods defined here:\n",
      " |  \n",
      " |  coeff_mul(self, coeff)\n",
      " |      See docstring of SeqBase.coeff_mul\n",
      " |  \n",
      " |  expand(self, *args, **kwargs)\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Static methods defined here:\n",
      " |  \n",
      " |  __new__(cls, formula, limits=None)\n",
      " |      Create and return a new object.  See help(type) for accurate signature.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Readonly properties defined here:\n",
      " |  \n",
      " |  __sympy__\n",
      " |  \n",
      " |  formula\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data and other attributes defined here:\n",
      " |  \n",
      " |  default_assumptions = {'commutative': True}\n",
      " |  \n",
      " |  is_commutative = True\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Readonly properties inherited from SeqExpr:\n",
      " |  \n",
      " |  gen\n",
      " |      Returns the generator for the sequence\n",
      " |  \n",
      " |  interval\n",
      " |      The interval on which the sequence is defined\n",
      " |  \n",
      " |  length\n",
      " |      Length of the sequence\n",
      " |  \n",
      " |  start\n",
      " |      The starting point of the sequence. This point is included\n",
      " |  \n",
      " |  stop\n",
      " |      The ending point of the sequence. This point is included\n",
      " |  \n",
      " |  variables\n",
      " |      Returns a tuple of variables that are bounded\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from SeqBase:\n",
      " |  \n",
      " |  __add__(self, other)\n",
      " |      Returns the term-wise addition of 'self' and 'other'.\n",
      " |      \n",
      " |      ``other`` should be a sequence.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import SeqFormula\n",
      " |      >>> from sympy.abc import n\n",
      " |      >>> SeqFormula(n**2) + SeqFormula(n**3)\n",
      " |      SeqFormula(n**3 + n**2, (n, 0, oo))\n",
      " |  \n",
      " |  __getitem__(self, index)\n",
      " |  \n",
      " |  __iter__(self)\n",
      " |  \n",
      " |  __mul__(self, other)\n",
      " |      Returns the term-wise multiplication of 'self' and 'other'.\n",
      " |      \n",
      " |      ``other`` should be a sequence. For ``other`` not being a\n",
      " |      sequence see :func:`coeff_mul` method.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import SeqFormula\n",
      " |      >>> from sympy.abc import n\n",
      " |      >>> SeqFormula(n**2) * (SeqFormula(n))\n",
      " |      SeqFormula(n**3, (n, 0, oo))\n",
      " |  \n",
      " |  __neg__(self)\n",
      " |      Negates the sequence.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import SeqFormula\n",
      " |      >>> from sympy.abc import n\n",
      " |      >>> -SeqFormula(n**2)\n",
      " |      SeqFormula(-n**2, (n, 0, oo))\n",
      " |  \n",
      " |  __radd__(self, other)\n",
      " |  \n",
      " |  __rmul__(self, other)\n",
      " |  \n",
      " |  __rsub__(self, other)\n",
      " |  \n",
      " |  __sub__(self, other)\n",
      " |      Returns the term-wise subtraction of ``self`` and ``other``.\n",
      " |      \n",
      " |      ``other`` should be a sequence.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import SeqFormula\n",
      " |      >>> from sympy.abc import n\n",
      " |      >>> SeqFormula(n**2) - (SeqFormula(n))\n",
      " |      SeqFormula(n**2 - n, (n, 0, oo))\n",
      " |  \n",
      " |  coeff(self, pt)\n",
      " |      Returns the coefficient at point pt\n",
      " |  \n",
      " |  find_linear_recurrence(self, n, d=None, gfvar=None)\n",
      " |      Finds the shortest linear recurrence that satisfies the first n\n",
      " |      terms of sequence of order `\\leq` ``n/2`` if possible.\n",
      " |      If ``d`` is specified, find shortest linear recurrence of order\n",
      " |      `\\leq` min(d, n/2) if possible.\n",
      " |      Returns list of coefficients ``[b(1), b(2), ...]`` corresponding to the\n",
      " |      recurrence relation ``x(n) = b(1)*x(n-1) + b(2)*x(n-2) + ...``\n",
      " |      Returns ``[]`` if no recurrence is found.\n",
      " |      If gfvar is specified, also returns ordinary generating function as a\n",
      " |      function of gfvar.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import sequence, sqrt, oo, lucas\n",
      " |      >>> from sympy.abc import n, x, y\n",
      " |      >>> sequence(n**2).find_linear_recurrence(10, 2)\n",
      " |      []\n",
      " |      >>> sequence(n**2).find_linear_recurrence(10)\n",
      " |      [3, -3, 1]\n",
      " |      >>> sequence(2**n).find_linear_recurrence(10)\n",
      " |      [2]\n",
      " |      >>> sequence(23*n**4+91*n**2).find_linear_recurrence(10)\n",
      " |      [5, -10, 10, -5, 1]\n",
      " |      >>> sequence(sqrt(5)*(((1 + sqrt(5))/2)**n - (-(1 + sqrt(5))/2)**(-n))/5).find_linear_recurrence(10)\n",
      " |      [1, 1]\n",
      " |      >>> sequence(x+y*(-2)**(-n), (n, 0, oo)).find_linear_recurrence(30)\n",
      " |      [1/2, 1/2]\n",
      " |      >>> sequence(3*5**n + 12).find_linear_recurrence(20,gfvar=x)\n",
      " |      ([6, -5], 3*(5 - 21*x)/((x - 1)*(5*x - 1)))\n",
      " |      >>> sequence(lucas(n)).find_linear_recurrence(15,gfvar=x)\n",
      " |      ([1, 1], (x - 2)/(x**2 + x - 1))\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Readonly properties inherited from SeqBase:\n",
      " |  \n",
      " |  free_symbols\n",
      " |      This method returns the symbols in the object, excluding those\n",
      " |      that take on a specific value (i.e. the dummy symbols).\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import SeqFormula\n",
      " |      >>> from sympy.abc import n, m\n",
      " |      >>> SeqFormula(m*n**2, (n, 0, 5)).free_symbols\n",
      " |      {m}\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data descriptors inherited from SeqBase:\n",
      " |  \n",
      " |  __dict__\n",
      " |      dictionary for instance variables (if defined)\n",
      " |  \n",
      " |  __weakref__\n",
      " |      list of weak references to the object (if defined)\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from sympy.core.basic.Basic:\n",
      " |  \n",
      " |  __eq__(self, other)\n",
      " |      Return a boolean indicating whether a == b on the basis of\n",
      " |      their symbolic trees.\n",
      " |      \n",
      " |      This is the same as a.compare(b) == 0 but faster.\n",
      " |      \n",
      " |      Notes\n",
      " |      =====\n",
      " |      \n",
      " |      If a class that overrides __eq__() needs to retain the\n",
      " |      implementation of __hash__() from a parent class, the\n",
      " |      interpreter must be told this explicitly by setting __hash__ =\n",
      " |      <ParentClass>.__hash__. Otherwise the inheritance of __hash__()\n",
      " |      will be blocked, just as if __hash__ had been explicitly set to\n",
      " |      None.\n",
      " |      \n",
      " |      References\n",
      " |      ==========\n",
      " |      \n",
      " |      from http://docs.python.org/dev/reference/datamodel.html#object.__hash__\n",
      " |  \n",
      " |  __getnewargs__(self)\n",
      " |  \n",
      " |  __getstate__(self)\n",
      " |  \n",
      " |  __hash__(self)\n",
      " |      Return hash(self).\n",
      " |  \n",
      " |  __ne__(self, other)\n",
      " |      ``a != b``  -> Compare two symbolic trees and see whether they are different\n",
      " |      \n",
      " |      this is the same as:\n",
      " |      \n",
      " |      ``a.compare(b) != 0``\n",
      " |      \n",
      " |      but faster\n",
      " |  \n",
      " |  __reduce_ex__(self, protocol)\n",
      " |      Helper for pickle.\n",
      " |  \n",
      " |  as_content_primitive(self, radical=False, clear=True)\n",
      " |      A stub to allow Basic args (like Tuple) to be skipped when computing\n",
      " |      the content and primitive components of an expression.\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      sympy.core.expr.Expr.as_content_primitive\n",
      " |  \n",
      " |  as_dummy(self)\n",
      " |      Return the expression with any objects having structurally\n",
      " |      bound symbols replaced with unique, canonical symbols within\n",
      " |      the object in which they appear and having only the default\n",
      " |      assumption for commutativity being True. When applied to a\n",
      " |      symbol a new symbol having only the same commutativity will be\n",
      " |      returned.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Integral, Symbol\n",
      " |      >>> from sympy.abc import x\n",
      " |      >>> r = Symbol('r', real=True)\n",
      " |      >>> Integral(r, (r, x)).as_dummy()\n",
      " |      Integral(_0, (_0, x))\n",
      " |      >>> _.variables[0].is_real is None\n",
      " |      True\n",
      " |      >>> r.as_dummy()\n",
      " |      _r\n",
      " |      \n",
      " |      Notes\n",
      " |      =====\n",
      " |      \n",
      " |      Any object that has structurally bound variables should have\n",
      " |      a property, `bound_symbols` that returns those symbols\n",
      " |      appearing in the object.\n",
      " |  \n",
      " |  atoms(self, *types)\n",
      " |      Returns the atoms that form the current object.\n",
      " |      \n",
      " |      By default, only objects that are truly atomic and can't\n",
      " |      be divided into smaller pieces are returned: symbols, numbers,\n",
      " |      and number symbols like I and pi. It is possible to request\n",
      " |      atoms of any type, however, as demonstrated below.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import I, pi, sin\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms()\n",
      " |      {1, 2, I, pi, x, y}\n",
      " |      \n",
      " |      If one or more types are given, the results will contain only\n",
      " |      those types of atoms.\n",
      " |      \n",
      " |      >>> from sympy import Number, NumberSymbol, Symbol\n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(Symbol)\n",
      " |      {x, y}\n",
      " |      \n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(Number)\n",
      " |      {1, 2}\n",
      " |      \n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(Number, NumberSymbol)\n",
      " |      {1, 2, pi}\n",
      " |      \n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(Number, NumberSymbol, I)\n",
      " |      {1, 2, I, pi}\n",
      " |      \n",
      " |      Note that I (imaginary unit) and zoo (complex infinity) are special\n",
      " |      types of number symbols and are not part of the NumberSymbol class.\n",
      " |      \n",
      " |      The type can be given implicitly, too:\n",
      " |      \n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(x) # x is a Symbol\n",
      " |      {x, y}\n",
      " |      \n",
      " |      Be careful to check your assumptions when using the implicit option\n",
      " |      since ``S(1).is_Integer = True`` but ``type(S(1))`` is ``One``, a special type\n",
      " |      of sympy atom, while ``type(S(2))`` is type ``Integer`` and will find all\n",
      " |      integers in an expression:\n",
      " |      \n",
      " |      >>> from sympy import S\n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(S(1))\n",
      " |      {1}\n",
      " |      \n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(S(2))\n",
      " |      {1, 2}\n",
      " |      \n",
      " |      Finally, arguments to atoms() can select more than atomic atoms: any\n",
      " |      sympy type (loaded in core/__init__.py) can be listed as an argument\n",
      " |      and those types of \"atoms\" as found in scanning the arguments of the\n",
      " |      expression recursively:\n",
      " |      \n",
      " |      >>> from sympy import Function, Mul\n",
      " |      >>> from sympy.core.function import AppliedUndef\n",
      " |      >>> f = Function('f')\n",
      " |      >>> (1 + f(x) + 2*sin(y + I*pi)).atoms(Function)\n",
      " |      {f(x), sin(y + I*pi)}\n",
      " |      >>> (1 + f(x) + 2*sin(y + I*pi)).atoms(AppliedUndef)\n",
      " |      {f(x)}\n",
      " |      \n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(Mul)\n",
      " |      {I*pi, 2*sin(y + I*pi)}\n",
      " |  \n",
      " |  compare(self, other)\n",
      " |      Return -1, 0, 1 if the object is smaller, equal, or greater than other.\n",
      " |      \n",
      " |      Not in the mathematical sense. If the object is of a different type\n",
      " |      from the \"other\" then their classes are ordered according to\n",
      " |      the sorted_classes list.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy.abc import x, y\n",
      " |      >>> x.compare(y)\n",
      " |      -1\n",
      " |      >>> x.compare(x)\n",
      " |      0\n",
      " |      >>> y.compare(x)\n",
      " |      1\n",
      " |  \n",
      " |  copy(self)\n",
      " |  \n",
      " |  count(self, query)\n",
      " |      Count the number of matching subexpressions.\n",
      " |  \n",
      " |  count_ops(self, visual=None)\n",
      " |      wrapper for count_ops that returns the operation count.\n",
      " |  \n",
      " |  doit(self, **hints)\n",
      " |      Evaluate objects that are not evaluated by default like limits,\n",
      " |      integrals, sums and products. All objects of this kind will be\n",
      " |      evaluated recursively, unless some species were excluded via 'hints'\n",
      " |      or unless the 'deep' hint was set to 'False'.\n",
      " |      \n",
      " |      >>> from sympy import Integral\n",
      " |      >>> from sympy.abc import x\n",
      " |      \n",
      " |      >>> 2*Integral(x, x)\n",
      " |      2*Integral(x, x)\n",
      " |      \n",
      " |      >>> (2*Integral(x, x)).doit()\n",
      " |      x**2\n",
      " |      \n",
      " |      >>> (2*Integral(x, x)).doit(deep=False)\n",
      " |      2*Integral(x, x)\n",
      " |  \n",
      " |  dummy_eq(self, other, symbol=None)\n",
      " |      Compare two expressions and handle dummy symbols.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Dummy\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      \n",
      " |      >>> u = Dummy('u')\n",
      " |      \n",
      " |      >>> (u**2 + 1).dummy_eq(x**2 + 1)\n",
      " |      True\n",
      " |      >>> (u**2 + 1) == (x**2 + 1)\n",
      " |      False\n",
      " |      \n",
      " |      >>> (u**2 + y).dummy_eq(x**2 + y, x)\n",
      " |      True\n",
      " |      >>> (u**2 + y).dummy_eq(x**2 + y, y)\n",
      " |      False\n",
      " |  \n",
      " |  find(self, query, group=False)\n",
      " |      Find all subexpressions matching a query.\n",
      " |  \n",
      " |  has(self, *patterns)\n",
      " |      Test whether any subexpression matches any of the patterns.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import sin\n",
      " |      >>> from sympy.abc import x, y, z\n",
      " |      >>> (x**2 + sin(x*y)).has(z)\n",
      " |      False\n",
      " |      >>> (x**2 + sin(x*y)).has(x, y, z)\n",
      " |      True\n",
      " |      >>> x.has(x)\n",
      " |      True\n",
      " |      \n",
      " |      Note ``has`` is a structural algorithm with no knowledge of\n",
      " |      mathematics. Consider the following half-open interval:\n",
      " |      \n",
      " |      >>> from sympy.sets import Interval\n",
      " |      >>> i = Interval.Lopen(0, 5); i\n",
      " |      Interval.Lopen(0, 5)\n",
      " |      >>> i.args\n",
      " |      (0, 5, True, False)\n",
      " |      >>> i.has(4)  # there is no \"4\" in the arguments\n",
      " |      False\n",
      " |      >>> i.has(0)  # there *is* a \"0\" in the arguments\n",
      " |      True\n",
      " |      \n",
      " |      Instead, use ``contains`` to determine whether a number is in the\n",
      " |      interval or not:\n",
      " |      \n",
      " |      >>> i.contains(4)\n",
      " |      True\n",
      " |      >>> i.contains(0)\n",
      " |      False\n",
      " |      \n",
      " |      \n",
      " |      Note that ``expr.has(*patterns)`` is exactly equivalent to\n",
      " |      ``any(expr.has(p) for p in patterns)``. In particular, ``False`` is\n",
      " |      returned when the list of patterns is empty.\n",
      " |      \n",
      " |      >>> x.has()\n",
      " |      False\n",
      " |  \n",
      " |  is_hypergeometric(self, k)\n",
      " |  \n",
      " |  match(self, pattern, old=False)\n",
      " |      Pattern matching.\n",
      " |      \n",
      " |      Wild symbols match all.\n",
      " |      \n",
      " |      Return ``None`` when expression (self) does not match\n",
      " |      with pattern. Otherwise return a dictionary such that::\n",
      " |      \n",
      " |        pattern.xreplace(self.match(pattern)) == self\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Wild, Sum\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      >>> p = Wild(\"p\")\n",
      " |      >>> q = Wild(\"q\")\n",
      " |      >>> r = Wild(\"r\")\n",
      " |      >>> e = (x+y)**(x+y)\n",
      " |      >>> e.match(p**p)\n",
      " |      {p_: x + y}\n",
      " |      >>> e.match(p**q)\n",
      " |      {p_: x + y, q_: x + y}\n",
      " |      >>> e = (2*x)**2\n",
      " |      >>> e.match(p*q**r)\n",
      " |      {p_: 4, q_: x, r_: 2}\n",
      " |      >>> (p*q**r).xreplace(e.match(p*q**r))\n",
      " |      4*x**2\n",
      " |      \n",
      " |      Structurally bound symbols are ignored during matching:\n",
      " |      \n",
      " |      >>> Sum(x, (x, 1, 2)).match(Sum(y, (y, 1, p)))\n",
      " |      {p_: 2}\n",
      " |      \n",
      " |      But they can be identified if desired:\n",
      " |      \n",
      " |      >>> Sum(x, (x, 1, 2)).match(Sum(q, (q, 1, p)))\n",
      " |      {p_: 2, q_: x}\n",
      " |      \n",
      " |      The ``old`` flag will give the old-style pattern matching where\n",
      " |      expressions and patterns are essentially solved to give the\n",
      " |      match. Both of the following give None unless ``old=True``:\n",
      " |      \n",
      " |      >>> (x - 2).match(p - x, old=True)\n",
      " |      {p_: 2*x - 2}\n",
      " |      >>> (2/x).match(p*x, old=True)\n",
      " |      {p_: 2/x**2}\n",
      " |  \n",
      " |  matches(self, expr, repl_dict={}, old=False)\n",
      " |      Helper method for match() that looks for a match between Wild symbols\n",
      " |      in self and expressions in expr.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import symbols, Wild, Basic\n",
      " |      >>> a, b, c = symbols('a b c')\n",
      " |      >>> x = Wild('x')\n",
      " |      >>> Basic(a + x, x).matches(Basic(a + b, c)) is None\n",
      " |      True\n",
      " |      >>> Basic(a + x, x).matches(Basic(a + b + c, b + c))\n",
      " |      {x_: b + c}\n",
      " |  \n",
      " |  rcall(self, *args)\n",
      " |      Apply on the argument recursively through the expression tree.\n",
      " |      \n",
      " |      This method is used to simulate a common abuse of notation for\n",
      " |      operators. For instance in SymPy the the following will not work:\n",
      " |      \n",
      " |      ``(x+Lambda(y, 2*y))(z) == x+2*z``,\n",
      " |      \n",
      " |      however you can use\n",
      " |      \n",
      " |      >>> from sympy import Lambda\n",
      " |      >>> from sympy.abc import x, y, z\n",
      " |      >>> (x + Lambda(y, 2*y)).rcall(z)\n",
      " |      x + 2*z\n",
      " |  \n",
      " |  refine(self, assumption=True)\n",
      " |      See the refine function in sympy.assumptions\n",
      " |  \n",
      " |  replace(self, query, value, map=False, simultaneous=True, exact=None)\n",
      " |      Replace matching subexpressions of ``self`` with ``value``.\n",
      " |      \n",
      " |      If ``map = True`` then also return the mapping {old: new} where ``old``\n",
      " |      was a sub-expression found with query and ``new`` is the replacement\n",
      " |      value for it. If the expression itself doesn't match the query, then\n",
      " |      the returned value will be ``self.xreplace(map)`` otherwise it should\n",
      " |      be ``self.subs(ordered(map.items()))``.\n",
      " |      \n",
      " |      Traverses an expression tree and performs replacement of matching\n",
      " |      subexpressions from the bottom to the top of the tree. The default\n",
      " |      approach is to do the replacement in a simultaneous fashion so\n",
      " |      changes made are targeted only once. If this is not desired or causes\n",
      " |      problems, ``simultaneous`` can be set to False.\n",
      " |      \n",
      " |      In addition, if an expression containing more than one Wild symbol\n",
      " |      is being used to match subexpressions and the ``exact`` flag is None\n",
      " |      it will be set to True so the match will only succeed if all non-zero\n",
      " |      values are received for each Wild that appears in the match pattern.\n",
      " |      Setting this to False accepts a match of 0; while setting it True\n",
      " |      accepts all matches that have a 0 in them. See example below for\n",
      " |      cautions.\n",
      " |      \n",
      " |      The list of possible combinations of queries and replacement values\n",
      " |      is listed below:\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      Initial setup\n",
      " |      \n",
      " |      >>> from sympy import log, sin, cos, tan, Wild, Mul, Add\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      >>> f = log(sin(x)) + tan(sin(x**2))\n",
      " |      \n",
      " |      1.1. type -> type\n",
      " |          obj.replace(type, newtype)\n",
      " |      \n",
      " |          When object of type ``type`` is found, replace it with the\n",
      " |          result of passing its argument(s) to ``newtype``.\n",
      " |      \n",
      " |          >>> f.replace(sin, cos)\n",
      " |          log(cos(x)) + tan(cos(x**2))\n",
      " |          >>> sin(x).replace(sin, cos, map=True)\n",
      " |          (cos(x), {sin(x): cos(x)})\n",
      " |          >>> (x*y).replace(Mul, Add)\n",
      " |          x + y\n",
      " |      \n",
      " |      1.2. type -> func\n",
      " |          obj.replace(type, func)\n",
      " |      \n",
      " |          When object of type ``type`` is found, apply ``func`` to its\n",
      " |          argument(s). ``func`` must be written to handle the number\n",
      " |          of arguments of ``type``.\n",
      " |      \n",
      " |          >>> f.replace(sin, lambda arg: sin(2*arg))\n",
      " |          log(sin(2*x)) + tan(sin(2*x**2))\n",
      " |          >>> (x*y).replace(Mul, lambda *args: sin(2*Mul(*args)))\n",
      " |          sin(2*x*y)\n",
      " |      \n",
      " |      2.1. pattern -> expr\n",
      " |          obj.replace(pattern(wild), expr(wild))\n",
      " |      \n",
      " |          Replace subexpressions matching ``pattern`` with the expression\n",
      " |          written in terms of the Wild symbols in ``pattern``.\n",
      " |      \n",
      " |          >>> a, b = map(Wild, 'ab')\n",
      " |          >>> f.replace(sin(a), tan(a))\n",
      " |          log(tan(x)) + tan(tan(x**2))\n",
      " |          >>> f.replace(sin(a), tan(a/2))\n",
      " |          log(tan(x/2)) + tan(tan(x**2/2))\n",
      " |          >>> f.replace(sin(a), a)\n",
      " |          log(x) + tan(x**2)\n",
      " |          >>> (x*y).replace(a*x, a)\n",
      " |          y\n",
      " |      \n",
      " |          Matching is exact by default when more than one Wild symbol\n",
      " |          is used: matching fails unless the match gives non-zero\n",
      " |          values for all Wild symbols:\n",
      " |      \n",
      " |          >>> (2*x + y).replace(a*x + b, b - a)\n",
      " |          y - 2\n",
      " |          >>> (2*x).replace(a*x + b, b - a)\n",
      " |          2*x\n",
      " |      \n",
      " |          When set to False, the results may be non-intuitive:\n",
      " |      \n",
      " |          >>> (2*x).replace(a*x + b, b - a, exact=False)\n",
      " |          2/x\n",
      " |      \n",
      " |      2.2. pattern -> func\n",
      " |          obj.replace(pattern(wild), lambda wild: expr(wild))\n",
      " |      \n",
      " |          All behavior is the same as in 2.1 but now a function in terms of\n",
      " |          pattern variables is used rather than an expression:\n",
      " |      \n",
      " |          >>> f.replace(sin(a), lambda a: sin(2*a))\n",
      " |          log(sin(2*x)) + tan(sin(2*x**2))\n",
      " |      \n",
      " |      3.1. func -> func\n",
      " |          obj.replace(filter, func)\n",
      " |      \n",
      " |          Replace subexpression ``e`` with ``func(e)`` if ``filter(e)``\n",
      " |          is True.\n",
      " |      \n",
      " |          >>> g = 2*sin(x**3)\n",
      " |          >>> g.replace(lambda expr: expr.is_Number, lambda expr: expr**2)\n",
      " |          4*sin(x**9)\n",
      " |      \n",
      " |      The expression itself is also targeted by the query but is done in\n",
      " |      such a fashion that changes are not made twice.\n",
      " |      \n",
      " |          >>> e = x*(x*y + 1)\n",
      " |          >>> e.replace(lambda x: x.is_Mul, lambda x: 2*x)\n",
      " |          2*x*(2*x*y + 1)\n",
      " |      \n",
      " |      When matching a single symbol, `exact` will default to True, but\n",
      " |      this may or may not be the behavior that is desired:\n",
      " |      \n",
      " |      Here, we want `exact=False`:\n",
      " |      \n",
      " |      >>> from sympy import Function\n",
      " |      >>> f = Function('f')\n",
      " |      >>> e = f(1) + f(0)\n",
      " |      >>> q = f(a), lambda a: f(a + 1)\n",
      " |      >>> e.replace(*q, exact=False)\n",
      " |      f(1) + f(2)\n",
      " |      >>> e.replace(*q, exact=True)\n",
      " |      f(0) + f(2)\n",
      " |      \n",
      " |      But here, the nature of matching makes selecting\n",
      " |      the right setting tricky:\n",
      " |      \n",
      " |      >>> e = x**(1 + y)\n",
      " |      >>> (x**(1 + y)).replace(x**(1 + a), lambda a: x**-a, exact=False)\n",
      " |      x\n",
      " |      >>> (x**(1 + y)).replace(x**(1 + a), lambda a: x**-a, exact=True)\n",
      " |      x**(-x - y + 1)\n",
      " |      >>> (x**y).replace(x**(1 + a), lambda a: x**-a, exact=False)\n",
      " |      x\n",
      " |      >>> (x**y).replace(x**(1 + a), lambda a: x**-a, exact=True)\n",
      " |      x**(1 - y)\n",
      " |      \n",
      " |      It is probably better to use a different form of the query\n",
      " |      that describes the target expression more precisely:\n",
      " |      \n",
      " |      >>> (1 + x**(1 + y)).replace(\n",
      " |      ... lambda x: x.is_Pow and x.exp.is_Add and x.exp.args[0] == 1,\n",
      " |      ... lambda x: x.base**(1 - (x.exp - 1)))\n",
      " |      ...\n",
      " |      x**(1 - y) + 1\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      subs: substitution of subexpressions as defined by the objects\n",
      " |            themselves.\n",
      " |      xreplace: exact node replacement in expr tree; also capable of\n",
      " |                using matching rules\n",
      " |  \n",
      " |  rewrite(self, *args, deep=True, **hints)\n",
      " |      Rewrite *self* using a defined rule.\n",
      " |      \n",
      " |      Rewriting transforms an expression to another, which is mathematically\n",
      " |      equivalent but structurally different. For example you can rewrite\n",
      " |      trigonometric functions as complex exponentials or combinatorial\n",
      " |      functions as gamma function.\n",
      " |      \n",
      " |      This method takes a *pattern* and a *rule* as positional arguments.\n",
      " |      *pattern* is optional parameter which defines the types of expressions\n",
      " |      that will be transformed. If it is not passed, all possible expressions\n",
      " |      will be rewritten. *rule* defines how the expression will be rewritten.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      args : *rule*, or *pattern* and *rule*.\n",
      " |          - *pattern* is a type or an iterable of types.\n",
      " |          - *rule* can be any object.\n",
      " |      \n",
      " |      deep : bool, optional.\n",
      " |          If ``True``, subexpressions are recursively transformed. Default is\n",
      " |          ``True``.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      If *pattern* is unspecified, all possible expressions are transformed.\n",
      " |      \n",
      " |      >>> from sympy import cos, sin, exp, I\n",
      " |      >>> from sympy.abc import x\n",
      " |      >>> expr = cos(x) + I*sin(x)\n",
      " |      >>> expr.rewrite(exp)\n",
      " |      exp(I*x)\n",
      " |      \n",
      " |      Pattern can be a type or an iterable of types.\n",
      " |      \n",
      " |      >>> expr.rewrite(sin, exp)\n",
      " |      exp(I*x)/2 + cos(x) - exp(-I*x)/2\n",
      " |      >>> expr.rewrite([cos,], exp)\n",
      " |      exp(I*x)/2 + I*sin(x) + exp(-I*x)/2\n",
      " |      >>> expr.rewrite([cos, sin], exp)\n",
      " |      exp(I*x)\n",
      " |      \n",
      " |      Rewriting behavior can be implemented by defining ``_eval_rewrite()``\n",
      " |      method.\n",
      " |      \n",
      " |      >>> from sympy import Expr, sqrt, pi\n",
      " |      >>> class MySin(Expr):\n",
      " |      ...     def _eval_rewrite(self, rule, args, **hints):\n",
      " |      ...         x, = args\n",
      " |      ...         if rule == cos:\n",
      " |      ...             return cos(pi/2 - x, evaluate=False)\n",
      " |      ...         if rule == sqrt:\n",
      " |      ...             return sqrt(1 - cos(x)**2)\n",
      " |      >>> MySin(MySin(x)).rewrite(cos)\n",
      " |      cos(-cos(-x + pi/2) + pi/2)\n",
      " |      >>> MySin(x).rewrite(sqrt)\n",
      " |      sqrt(1 - cos(x)**2)\n",
      " |      \n",
      " |      Defining ``_eval_rewrite_as_[...]()`` method is supported for backwards\n",
      " |      compatibility reason. This may be removed in the future and using it is\n",
      " |      discouraged.\n",
      " |      \n",
      " |      >>> class MySin(Expr):\n",
      " |      ...     def _eval_rewrite_as_cos(self, *args, **hints):\n",
      " |      ...         x, = args\n",
      " |      ...         return cos(pi/2 - x, evaluate=False)\n",
      " |      >>> MySin(x).rewrite(cos)\n",
      " |      cos(-x + pi/2)\n",
      " |  \n",
      " |  simplify(self, **kwargs)\n",
      " |      See the simplify function in sympy.simplify\n",
      " |  \n",
      " |  sort_key(self, order=None)\n",
      " |      Return a sort key.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy.core import S, I\n",
      " |      \n",
      " |      >>> sorted([S(1)/2, I, -I], key=lambda x: x.sort_key())\n",
      " |      [1/2, -I, I]\n",
      " |      \n",
      " |      >>> S(\"[x, 1/x, 1/x**2, x**2, x**(1/2), x**(1/4), x**(3/2)]\")\n",
      " |      [x, 1/x, x**(-2), x**2, sqrt(x), x**(1/4), x**(3/2)]\n",
      " |      >>> sorted(_, key=lambda x: x.sort_key())\n",
      " |      [x**(-2), 1/x, x**(1/4), sqrt(x), x, x**(3/2), x**2]\n",
      " |  \n",
      " |  subs(self, *args, **kwargs)\n",
      " |      Substitutes old for new in an expression after sympifying args.\n",
      " |      \n",
      " |      `args` is either:\n",
      " |        - two arguments, e.g. foo.subs(old, new)\n",
      " |        - one iterable argument, e.g. foo.subs(iterable). The iterable may be\n",
      " |           o an iterable container with (old, new) pairs. In this case the\n",
      " |             replacements are processed in the order given with successive\n",
      " |             patterns possibly affecting replacements already made.\n",
      " |           o a dict or set whose key/value items correspond to old/new pairs.\n",
      " |             In this case the old/new pairs will be sorted by op count and in\n",
      " |             case of a tie, by number of args and the default_sort_key. The\n",
      " |             resulting sorted list is then processed as an iterable container\n",
      " |             (see previous).\n",
      " |      \n",
      " |      If the keyword ``simultaneous`` is True, the subexpressions will not be\n",
      " |      evaluated until all the substitutions have been made.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import pi, exp, limit, oo\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      >>> (1 + x*y).subs(x, pi)\n",
      " |      pi*y + 1\n",
      " |      >>> (1 + x*y).subs({x:pi, y:2})\n",
      " |      1 + 2*pi\n",
      " |      >>> (1 + x*y).subs([(x, pi), (y, 2)])\n",
      " |      1 + 2*pi\n",
      " |      >>> reps = [(y, x**2), (x, 2)]\n",
      " |      >>> (x + y).subs(reps)\n",
      " |      6\n",
      " |      >>> (x + y).subs(reversed(reps))\n",
      " |      x**2 + 2\n",
      " |      \n",
      " |      >>> (x**2 + x**4).subs(x**2, y)\n",
      " |      y**2 + y\n",
      " |      \n",
      " |      To replace only the x**2 but not the x**4, use xreplace:\n",
      " |      \n",
      " |      >>> (x**2 + x**4).xreplace({x**2: y})\n",
      " |      x**4 + y\n",
      " |      \n",
      " |      To delay evaluation until all substitutions have been made,\n",
      " |      set the keyword ``simultaneous`` to True:\n",
      " |      \n",
      " |      >>> (x/y).subs([(x, 0), (y, 0)])\n",
      " |      0\n",
      " |      >>> (x/y).subs([(x, 0), (y, 0)], simultaneous=True)\n",
      " |      nan\n",
      " |      \n",
      " |      This has the added feature of not allowing subsequent substitutions\n",
      " |      to affect those already made:\n",
      " |      \n",
      " |      >>> ((x + y)/y).subs({x + y: y, y: x + y})\n",
      " |      1\n",
      " |      >>> ((x + y)/y).subs({x + y: y, y: x + y}, simultaneous=True)\n",
      " |      y/(x + y)\n",
      " |      \n",
      " |      In order to obtain a canonical result, unordered iterables are\n",
      " |      sorted by count_op length, number of arguments and by the\n",
      " |      default_sort_key to break any ties. All other iterables are left\n",
      " |      unsorted.\n",
      " |      \n",
      " |      >>> from sympy import sqrt, sin, cos\n",
      " |      >>> from sympy.abc import a, b, c, d, e\n",
      " |      \n",
      " |      >>> A = (sqrt(sin(2*x)), a)\n",
      " |      >>> B = (sin(2*x), b)\n",
      " |      >>> C = (cos(2*x), c)\n",
      " |      >>> D = (x, d)\n",
      " |      >>> E = (exp(x), e)\n",
      " |      \n",
      " |      >>> expr = sqrt(sin(2*x))*sin(exp(x)*x)*cos(2*x) + sin(2*x)\n",
      " |      \n",
      " |      >>> expr.subs(dict([A, B, C, D, E]))\n",
      " |      a*c*sin(d*e) + b\n",
      " |      \n",
      " |      The resulting expression represents a literal replacement of the\n",
      " |      old arguments with the new arguments. This may not reflect the\n",
      " |      limiting behavior of the expression:\n",
      " |      \n",
      " |      >>> (x**3 - 3*x).subs({x: oo})\n",
      " |      nan\n",
      " |      \n",
      " |      >>> limit(x**3 - 3*x, x, oo)\n",
      " |      oo\n",
      " |      \n",
      " |      If the substitution will be followed by numerical\n",
      " |      evaluation, it is better to pass the substitution to\n",
      " |      evalf as\n",
      " |      \n",
      " |      >>> (1/x).evalf(subs={x: 3.0}, n=21)\n",
      " |      0.333333333333333333333\n",
      " |      \n",
      " |      rather than\n",
      " |      \n",
      " |      >>> (1/x).subs({x: 3.0}).evalf(21)\n",
      " |      0.333333333333333314830\n",
      " |      \n",
      " |      as the former will ensure that the desired level of precision is\n",
      " |      obtained.\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      replace: replacement capable of doing wildcard-like matching,\n",
      " |               parsing of match, and conditional replacements\n",
      " |      xreplace: exact node replacement in expr tree; also capable of\n",
      " |                using matching rules\n",
      " |      sympy.core.evalf.EvalfMixin.evalf: calculates the given formula to a desired level of precision\n",
      " |  \n",
      " |  xreplace(self, rule)\n",
      " |      Replace occurrences of objects within the expression.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      rule : dict-like\n",
      " |          Expresses a replacement rule\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      xreplace : the result of the replacement\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import symbols, pi, exp\n",
      " |      >>> x, y, z = symbols('x y z')\n",
      " |      >>> (1 + x*y).xreplace({x: pi})\n",
      " |      pi*y + 1\n",
      " |      >>> (1 + x*y).xreplace({x: pi, y: 2})\n",
      " |      1 + 2*pi\n",
      " |      \n",
      " |      Replacements occur only if an entire node in the expression tree is\n",
      " |      matched:\n",
      " |      \n",
      " |      >>> (x*y + z).xreplace({x*y: pi})\n",
      " |      z + pi\n",
      " |      >>> (x*y*z).xreplace({x*y: pi})\n",
      " |      x*y*z\n",
      " |      >>> (2*x).xreplace({2*x: y, x: z})\n",
      " |      y\n",
      " |      >>> (2*2*x).xreplace({2*x: y, x: z})\n",
      " |      4*z\n",
      " |      >>> (x + y + 2).xreplace({x + y: 2})\n",
      " |      x + y + 2\n",
      " |      >>> (x + 2 + exp(x + 2)).xreplace({x + 2: y})\n",
      " |      x + exp(y) + 2\n",
      " |      \n",
      " |      xreplace doesn't differentiate between free and bound symbols. In the\n",
      " |      following, subs(x, y) would not change x since it is a bound symbol,\n",
      " |      but xreplace does:\n",
      " |      \n",
      " |      >>> from sympy import Integral\n",
      " |      >>> Integral(x, (x, 1, 2*x)).xreplace({x: y})\n",
      " |      Integral(y, (y, 1, 2*y))\n",
      " |      \n",
      " |      Trying to replace x with an expression raises an error:\n",
      " |      \n",
      " |      >>> Integral(x, (x, 1, 2*x)).xreplace({x: 2*y}) # doctest: +SKIP\n",
      " |      ValueError: Invalid limits given: ((2*y, 1, 4*y),)\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      replace: replacement capable of doing wildcard-like matching,\n",
      " |               parsing of match, and conditional replacements\n",
      " |      subs: substitution of subexpressions as defined by the objects\n",
      " |            themselves.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Class methods inherited from sympy.core.basic.Basic:\n",
      " |  \n",
      " |  class_key() from sympy.core.assumptions.ManagedProperties\n",
      " |      Nice order of classes.\n",
      " |  \n",
      " |  fromiter(args, **assumptions) from sympy.core.assumptions.ManagedProperties\n",
      " |      Create a new object from an iterable.\n",
      " |      \n",
      " |      This is a convenience function that allows one to create objects from\n",
      " |      any iterable, without having to convert to a list or tuple first.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Tuple\n",
      " |      >>> Tuple.fromiter(i for i in range(5))\n",
      " |      (0, 1, 2, 3, 4)\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Readonly properties inherited from sympy.core.basic.Basic:\n",
      " |  \n",
      " |  args\n",
      " |      Returns a tuple of arguments of 'self'.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import cot\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      \n",
      " |      >>> cot(x).args\n",
      " |      (x,)\n",
      " |      \n",
      " |      >>> cot(x).args[0]\n",
      " |      x\n",
      " |      \n",
      " |      >>> (x*y).args\n",
      " |      (x, y)\n",
      " |      \n",
      " |      >>> (x*y).args[1]\n",
      " |      y\n",
      " |      \n",
      " |      Notes\n",
      " |      =====\n",
      " |      \n",
      " |      Never use self._args, always use self.args.\n",
      " |      Only use _args in __new__ when creating a new function.\n",
      " |      Don't override .args() from Basic (so that it's easy to\n",
      " |      change the interface in the future if needed).\n",
      " |  \n",
      " |  assumptions0\n",
      " |      Return object `type` assumptions.\n",
      " |      \n",
      " |      For example:\n",
      " |      \n",
      " |        Symbol('x', real=True)\n",
      " |        Symbol('x', integer=True)\n",
      " |      \n",
      " |      are different objects. In other words, besides Python type (Symbol in\n",
      " |      this case), the initial assumptions are also forming their typeinfo.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Symbol\n",
      " |      >>> from sympy.abc import x\n",
      " |      >>> x.assumptions0\n",
      " |      {'commutative': True}\n",
      " |      >>> x = Symbol(\"x\", positive=True)\n",
      " |      >>> x.assumptions0\n",
      " |      {'commutative': True, 'complex': True, 'extended_negative': False,\n",
      " |       'extended_nonnegative': True, 'extended_nonpositive': False,\n",
      " |       'extended_nonzero': True, 'extended_positive': True, 'extended_real':\n",
      " |       True, 'finite': True, 'hermitian': True, 'imaginary': False,\n",
      " |       'infinite': False, 'negative': False, 'nonnegative': True,\n",
      " |       'nonpositive': False, 'nonzero': True, 'positive': True, 'real':\n",
      " |       True, 'zero': False}\n",
      " |  \n",
      " |  canonical_variables\n",
      " |      Return a dictionary mapping any variable defined in\n",
      " |      ``self.bound_symbols`` to Symbols that do not clash\n",
      " |      with any free symbols in the expression.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Lambda\n",
      " |      >>> from sympy.abc import x\n",
      " |      >>> Lambda(x, 2*x).canonical_variables\n",
      " |      {x: _0}\n",
      " |  \n",
      " |  expr_free_symbols\n",
      " |  \n",
      " |  func\n",
      " |      The top-level function in an expression.\n",
      " |      \n",
      " |      The following should hold for all objects::\n",
      " |      \n",
      " |          >> x == x.func(*x.args)\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy.abc import x\n",
      " |      >>> a = 2*x\n",
      " |      >>> a.func\n",
      " |      <class 'sympy.core.mul.Mul'>\n",
      " |      >>> a.args\n",
      " |      (2, x)\n",
      " |      >>> a.func(*a.args)\n",
      " |      2*x\n",
      " |      >>> a == a.func(*a.args)\n",
      " |      True\n",
      " |  \n",
      " |  is_algebraic\n",
      " |  \n",
      " |  is_antihermitian\n",
      " |  \n",
      " |  is_comparable\n",
      " |      Return True if self can be computed to a real number\n",
      " |      (or already is a real number) with precision, else False.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import exp_polar, pi, I\n",
      " |      >>> (I*exp_polar(I*pi/2)).is_comparable\n",
      " |      True\n",
      " |      >>> (I*exp_polar(I*pi*2)).is_comparable\n",
      " |      False\n",
      " |      \n",
      " |      A False result does not mean that `self` cannot be rewritten\n",
      " |      into a form that would be comparable. For example, the\n",
      " |      difference computed below is zero but without simplification\n",
      " |      it does not evaluate to a zero with precision:\n",
      " |      \n",
      " |      >>> e = 2**pi*(1 + 2**pi)\n",
      " |      >>> dif = e - e.expand()\n",
      " |      >>> dif.is_comparable\n",
      " |      False\n",
      " |      >>> dif.n(2)._prec\n",
      " |      1\n",
      " |  \n",
      " |  is_complex\n",
      " |  \n",
      " |  is_composite\n",
      " |  \n",
      " |  is_even\n",
      " |  \n",
      " |  is_extended_negative\n",
      " |  \n",
      " |  is_extended_nonnegative\n",
      " |  \n",
      " |  is_extended_nonpositive\n",
      " |  \n",
      " |  is_extended_nonzero\n",
      " |  \n",
      " |  is_extended_positive\n",
      " |  \n",
      " |  is_extended_real\n",
      " |  \n",
      " |  is_finite\n",
      " |  \n",
      " |  is_hermitian\n",
      " |  \n",
      " |  is_imaginary\n",
      " |  \n",
      " |  is_infinite\n",
      " |  \n",
      " |  is_integer\n",
      " |  \n",
      " |  is_irrational\n",
      " |  \n",
      " |  is_negative\n",
      " |  \n",
      " |  is_noninteger\n",
      " |  \n",
      " |  is_nonnegative\n",
      " |  \n",
      " |  is_nonpositive\n",
      " |  \n",
      " |  is_nonzero\n",
      " |  \n",
      " |  is_odd\n",
      " |  \n",
      " |  is_polar\n",
      " |  \n",
      " |  is_positive\n",
      " |  \n",
      " |  is_prime\n",
      " |  \n",
      " |  is_rational\n",
      " |  \n",
      " |  is_real\n",
      " |  \n",
      " |  is_transcendental\n",
      " |  \n",
      " |  is_zero\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data and other attributes inherited from sympy.core.basic.Basic:\n",
      " |  \n",
      " |  is_Add = False\n",
      " |  \n",
      " |  is_AlgebraicNumber = False\n",
      " |  \n",
      " |  is_Atom = False\n",
      " |  \n",
      " |  is_Boolean = False\n",
      " |  \n",
      " |  is_Derivative = False\n",
      " |  \n",
      " |  is_Dummy = False\n",
      " |  \n",
      " |  is_Equality = False\n",
      " |  \n",
      " |  is_Float = False\n",
      " |  \n",
      " |  is_Function = False\n",
      " |  \n",
      " |  is_Indexed = False\n",
      " |  \n",
      " |  is_Integer = False\n",
      " |  \n",
      " |  is_MatAdd = False\n",
      " |  \n",
      " |  is_MatMul = False\n",
      " |  \n",
      " |  is_Matrix = False\n",
      " |  \n",
      " |  is_Mul = False\n",
      " |  \n",
      " |  is_Not = False\n",
      " |  \n",
      " |  is_Number = False\n",
      " |  \n",
      " |  is_NumberSymbol = False\n",
      " |  \n",
      " |  is_Order = False\n",
      " |  \n",
      " |  is_Piecewise = False\n",
      " |  \n",
      " |  is_Point = False\n",
      " |  \n",
      " |  is_Poly = False\n",
      " |  \n",
      " |  is_Pow = False\n",
      " |  \n",
      " |  is_Rational = False\n",
      " |  \n",
      " |  is_Relational = False\n",
      " |  \n",
      " |  is_Symbol = False\n",
      " |  \n",
      " |  is_Vector = False\n",
      " |  \n",
      " |  is_Wild = False\n",
      " |  \n",
      " |  is_number = False\n",
      " |  \n",
      " |  is_symbol = False\n",
      " |  \n",
      " |  kind = UndefinedKind\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from sympy.printing.defaults.Printable:\n",
      " |  \n",
      " |  __repr__ = __str__(self)\n",
      " |  \n",
      " |  __str__(self)\n",
      " |      Return str(self).\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(SeqFormula)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "11d202c5",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.abc import q,p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "62db54ba",
   "metadata": {},
   "outputs": [],
   "source": [
    "answer=list(nonlinsolve([a*(q**6-1)/(q-1)-7,a*q*(q**3+1)+3],[a,q]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "3bc3e10a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(-1/26, -3), (243/26, -1/3)]"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "answer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "e7e3a10a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 7$"
      ],
      "text/plain": [
       "7"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(a*(q**6-1)/(q-1)).subs([(a,answer[0][0]),(q,answer[0][1])])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "5a0ff8c6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -3$"
      ],
      "text/plain": [
       "-3"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(a*q*(q**3+1)).subs([(a,answer[0][0]),(q,answer[0][1])])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "79121419",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[3, 6, 9, 12, \\ldots\\right]$"
      ],
      "text/plain": [
       "SeqFormula(3*n, (n, 1, oo))"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "seq_a=SeqFormula(3*n,(n,1,oo))\n",
    "seq_a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "b33e4fbd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[2, 4, 8, 16, \\ldots\\right]$"
      ],
      "text/plain": [
       "SeqFormula(2**n, (n, 1, oo))"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "seq_b=SeqFormula(2**n,(n,1,oo))\n",
    "seq_b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "5ed89cfc",
   "metadata": {},
   "outputs": [],
   "source": [
    "def a_63_16(n):\n",
    "    if(n==1):\n",
    "        return S(1)\n",
    "    elif(n<=4):\n",
    "        return 1+1/a_63_16(n-1)\n",
    "    else:\n",
    "        return -1*a_63_16(n-3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "a4e395d3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{3}{2}$"
      ],
      "text/plain": [
       "-3/2"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a_63_16(2022)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "id": "c67a2dee",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n",
      "2\n",
      "3/2\n",
      "5/3\n",
      "-2\n",
      "-3/2\n",
      "-5/3\n",
      "2\n",
      "3/2\n",
      "5/3\n",
      "-2\n",
      "-3/2\n",
      "-5/3\n",
      "2\n",
      "3/2\n",
      "5/3\n",
      "-2\n",
      "-3/2\n",
      "-5/3\n"
     ]
    }
   ],
   "source": [
    "for i in range(1,20):\n",
    "    print(a_63_16(i))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "id": "ed456305",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a$"
      ],
      "text/plain": [
       "a"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "id": "2e2cddf0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle q$"
      ],
      "text/plain": [
       "q"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "id": "2063d528",
   "metadata": {},
   "outputs": [],
   "source": [
    "seq_expr=a*q**(n-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "id": "87e3ddd5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[a, a q, a q^{2}, a q^{3}, \\ldots\\right]$"
      ],
      "text/plain": [
       "SeqFormula(a*q**(n - 1), (n, 1, oo))"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "seq_geo=SeqFormula(seq_expr,(n,1,oo))\n",
    "seq_geo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "id": "a58412de",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on function summation in module sympy.concrete.summations:\n",
      "\n",
      "summation(f, *symbols, **kwargs)\n",
      "    Compute the summation of f with respect to symbols.\n",
      "    \n",
      "    Explanation\n",
      "    ===========\n",
      "    \n",
      "    The notation for symbols is similar to the notation used in Integral.\n",
      "    summation(f, (i, a, b)) computes the sum of f with respect to i from a to b,\n",
      "    i.e.,\n",
      "    \n",
      "    ::\n",
      "    \n",
      "                                    b\n",
      "                                  ____\n",
      "                                  \\   `\n",
      "        summation(f, (i, a, b)) =  )    f\n",
      "                                  /___,\n",
      "                                  i = a\n",
      "    \n",
      "    If it cannot compute the sum, it returns an unevaluated Sum object.\n",
      "    Repeated sums can be computed by introducing additional symbols tuples::\n",
      "    \n",
      "    Examples\n",
      "    ========\n",
      "    \n",
      "    >>> from sympy import summation, oo, symbols, log\n",
      "    >>> i, n, m = symbols('i n m', integer=True)\n",
      "    \n",
      "    >>> summation(2*i - 1, (i, 1, n))\n",
      "    n**2\n",
      "    >>> summation(1/2**i, (i, 0, oo))\n",
      "    2\n",
      "    >>> summation(1/log(n)**n, (n, 2, oo))\n",
      "    Sum(log(n)**(-n), (n, 2, oo))\n",
      "    >>> summation(i, (i, 0, n), (n, 0, m))\n",
      "    m**3/6 + m**2/2 + m/3\n",
      "    \n",
      "    >>> from sympy.abc import x\n",
      "    >>> from sympy import factorial\n",
      "    >>> summation(x**n/factorial(n), (n, 0, oo))\n",
      "    exp(x)\n",
      "    \n",
      "    See Also\n",
      "    ========\n",
      "    \n",
      "    Sum\n",
      "    Product, sympy.concrete.products.product\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(summation)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "id": "b2d019e3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a \\left(q^{2} + q + 1\\right)$"
      ],
      "text/plain": [
       "a*(q**2 + q + 1)"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "summation(seq_expr,(n,1,3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "id": "e6e28412",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\left( 2, \\  2\\right), \\left( -4 - 2 \\sqrt{3} i, \\  -1 - \\sqrt{3} i\\right), \\left( -4 + 2 \\sqrt{3} i, \\  -1 + \\sqrt{3} i\\right)\\right\\}$"
      ],
      "text/plain": [
       "{(2, 2), (-4 - 2*sqrt(3)*I, -1 - sqrt(3)*I), (-4 + 2*sqrt(3)*I, -1 + sqrt(3)*I)}"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nonlinsolve([summation(seq_expr,(n,1,3))-14,summation(seq_expr,(n,1,6))-126],[a,q])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "id": "84538e0f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 \\cdot 2^{m} m - 4 \\cdot 2^{m} + 4$"
      ],
      "text/plain": [
       "2*2**m*m - 4*2**m + 4"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(summation((n-1)*2**n,(n,1,m)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "id": "58b41e7e",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.abc import d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "id": "898b9470",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a + d \\left(n - 1\\right)$"
      ],
      "text/plain": [
       "a + d*(n - 1)"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "seq_line_expr=a+d*(n-1)\n",
    "seq_line_expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "id": "9f9daab2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[a, a + d, a + 2 d, a + 3 d, \\ldots\\right]$"
      ],
      "text/plain": [
       "SeqFormula(a + d*(n - 1), (n, 1, oo))"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "seq_line=SeqFormula(seq_line_expr,(n,1,oo))\n",
    "seq_line"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "b11335ae",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a + 2 d$"
      ],
      "text/plain": [
       "a + 2*d"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "seq_line.coeff(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "id": "8a6614fc",
   "metadata": {},
   "outputs": [],
   "source": [
    "eq1=Eq(summation(seq_line_expr,(n,1,2)),seq_line.coeff(3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "id": "46bb50fc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 a + d = a + 2 d$"
      ],
      "text/plain": [
       "Eq(2*a + d, a + 2*d)"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "id": "13d5ac9a",
   "metadata": {},
   "outputs": [],
   "source": [
    "eq2=Eq(seq_line.coeff(4),seq_line.coeff(1)*seq_line.coeff(2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "id": "8f8267cb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a + 3 d = a \\left(a + d\\right)$"
      ],
      "text/plain": [
       "Eq(a + 3*d, a*(a + d))"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "id": "d2722b96",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\left( 0, \\  0\\right), \\left( 2, \\  2\\right)\\right\\}$"
      ],
      "text/plain": [
       "{(0, 0), (2, 2)}"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nonlinsolve([eq1,eq2],[a,d])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "id": "86413253",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[2, 4, 6, 8, \\ldots\\right]$"
      ],
      "text/plain": [
       "SeqFormula(2*n, (n, 1, oo))"
      ]
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "seq_line.subs([(a,2),(d,2)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "id": "bbebb017",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3^{m} m - 3^{m} + 1$"
      ],
      "text/plain": [
       "3**m*m - 3**m + 1"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(summation((2*n-1)*3**(n-1),(n,1,m)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "id": "ef3b121a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 19 a + 171 d$"
      ],
      "text/plain": [
       "19*a + 171*d"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "summation(seq_line_expr,(n,1,19))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "id": "69046e8d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a + 9 d$"
      ],
      "text/plain": [
       "a + 9*d"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "3*seq_line.coeff(5)-seq_line.coeff(1)-seq_line.coeff(4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "id": "21585044",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.0"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "57/19"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "id": "8ab80fc9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 57$"
      ],
      "text/plain": [
       "57"
      ]
     },
     "execution_count": 119,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "summation(2**n-1,(n,1,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "id": "6991de37",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{a \\left(\\begin{cases} n & \\text{for}\\: q = 1 \\\\\\frac{q - q^{n + 1}}{1 - q} & \\text{otherwise} \\end{cases}\\right)}{q}$"
      ],
      "text/plain": [
       "a*Piecewise((n, Eq(q, 1)), ((q - q**(n + 1))/(1 - q), True))/q"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "seq_geo_sum=summation(seq_expr,(n,1,n))\n",
    "seq_geo_sum"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "id": "67fd2cc7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(\\left\\{1\\right\\} \\cap \\left\\{\\frac{3 a}{4}\\right\\}\\right) \\cup \\left(\\left(\\left(-\\infty, 1\\right) \\cup \\left(1, \\infty\\right)\\right) \\cap \\left\\{\\frac{- a - \\sqrt{- 3 a^{2} + 16 a}}{2 a}, \\frac{- a + \\sqrt{- 3 a^{2} + 16 a}}{2 a}\\right\\}\\right)$"
      ],
      "text/plain": [
       "Union(Intersection({1}, {3*a/4}), Intersection({(-a - sqrt(-3*a**2 + 16*a))/(2*a), (-a + sqrt(-3*a**2 + 16*a))/(2*a)}, Union(Interval.open(-oo, 1), Interval.open(1, oo))))"
      ]
     },
     "execution_count": 129,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "solveset(Eq(seq_geo_sum.subs(n,3),4),q,Reals)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "id": "bf5ffca8",
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "\nSecond argument must be a Boolean, not `Add`",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m/var/folders/dx/_crdzvnd0cg5f4sgbnvzvvgh0000gn/T/ipykernel_87258/3786667857.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnonlinsolve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mEq\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mseq_geo_sum\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mEq\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mseq_geo_sum\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m6\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m12\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mq\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/solvers/solveset.py\u001b[0m in \u001b[0;36mnonlinsolve\u001b[0;34m(system, *symbols)\u001b[0m\n\u001b[1;32m   3676\u001b[0m         \u001b[0;31m# If all the equations are not polynomial.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3677\u001b[0m         \u001b[0;31m# Use `substitution` method for the system\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3678\u001b[0;31m         result = substitution(\n\u001b[0m\u001b[1;32m   3679\u001b[0m             polys_expr + nonpolys, symbols, exclude=denominators)\n\u001b[1;32m   3680\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/solvers/solveset.py\u001b[0m in \u001b[0;36msubstitution\u001b[0;34m(system, symbols, result, known_symbols, exclude, all_symbols)\u001b[0m\n\u001b[1;32m   3332\u001b[0m     \u001b[0;31m# end def _solve_using_know_values()\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3333\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3334\u001b[0;31m     new_result_real, solve_call1, cnd_call1 = _solve_using_known_values(\n\u001b[0m\u001b[1;32m   3335\u001b[0m         old_result, solveset_real)\n\u001b[1;32m   3336\u001b[0m     new_result_complex, solve_call2, cnd_call2 = _solve_using_known_values(\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/solvers/solveset.py\u001b[0m in \u001b[0;36m_solve_using_known_values\u001b[0;34m(result, solver)\u001b[0m\n\u001b[1;32m   3236\u001b[0m                             \u001b[0mresult\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mremove\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mres\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3237\u001b[0m                     \u001b[0;32mcontinue\u001b[0m  \u001b[0;31m# skip as it's independent of desired symbols\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3238\u001b[0;31m                 \u001b[0mdepen1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdepen2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0meq2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrewrite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mAdd\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mas_independent\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0munsolved_syms\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3239\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mdepen1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhas\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mAbs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mdepen2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhas\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mAbs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0msolver\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0msolveset_complex\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3240\u001b[0m                     \u001b[0;31m# Absolute values cannot be inverted in the\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/core/basic.py\u001b[0m in \u001b[0;36mrewrite\u001b[0;34m(self, deep, *args, **hints)\u001b[0m\n\u001b[1;32m   1801\u001b[0m         \u001b[0;31m# hereafter, empty pattern is interpreted as all pattern.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1802\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1803\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_rewrite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpattern\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mhints\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1804\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1805\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_rewrite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpattern\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mhints\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/core/basic.py\u001b[0m in \u001b[0;36m_rewrite\u001b[0;34m(self, pattern, rule, method, **hints)\u001b[0m\n\u001b[1;32m   1806\u001b[0m         \u001b[0mdeep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhints\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'deep'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1807\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mdeep\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1808\u001b[0;31m             args = [a._rewrite(pattern, rule, method, **hints)\n\u001b[0m\u001b[1;32m   1809\u001b[0m                     for a in self.args]\n\u001b[1;32m   1810\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/core/basic.py\u001b[0m in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m   1806\u001b[0m         \u001b[0mdeep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhints\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'deep'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1807\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mdeep\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1808\u001b[0;31m             args = [a._rewrite(pattern, rule, method, **hints)\n\u001b[0m\u001b[1;32m   1809\u001b[0m                     for a in self.args]\n\u001b[1;32m   1810\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/core/basic.py\u001b[0m in \u001b[0;36m_rewrite\u001b[0;34m(self, pattern, rule, method, **hints)\u001b[0m\n\u001b[1;32m   1806\u001b[0m         \u001b[0mdeep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhints\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'deep'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1807\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mdeep\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1808\u001b[0;31m             args = [a._rewrite(pattern, rule, method, **hints)\n\u001b[0m\u001b[1;32m   1809\u001b[0m                     for a in self.args]\n\u001b[1;32m   1810\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/core/basic.py\u001b[0m in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m   1806\u001b[0m         \u001b[0mdeep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhints\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'deep'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1807\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mdeep\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1808\u001b[0;31m             args = [a._rewrite(pattern, rule, method, **hints)\n\u001b[0m\u001b[1;32m   1809\u001b[0m                     for a in self.args]\n\u001b[1;32m   1810\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/core/basic.py\u001b[0m in \u001b[0;36m_rewrite\u001b[0;34m(self, pattern, rule, method, **hints)\u001b[0m\n\u001b[1;32m   1806\u001b[0m         \u001b[0mdeep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhints\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'deep'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1807\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mdeep\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1808\u001b[0;31m             args = [a._rewrite(pattern, rule, method, **hints)\n\u001b[0m\u001b[1;32m   1809\u001b[0m                     for a in self.args]\n\u001b[1;32m   1810\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/core/basic.py\u001b[0m in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m   1806\u001b[0m         \u001b[0mdeep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhints\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'deep'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1807\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mdeep\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1808\u001b[0;31m             args = [a._rewrite(pattern, rule, method, **hints)\n\u001b[0m\u001b[1;32m   1809\u001b[0m                     for a in self.args]\n\u001b[1;32m   1810\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/core/basic.py\u001b[0m in \u001b[0;36m_rewrite\u001b[0;34m(self, pattern, rule, method, **hints)\u001b[0m\n\u001b[1;32m   1820\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1821\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1822\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1823\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1824\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_eval_rewrite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mhints\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/sympy/functions/elementary/piecewise.py\u001b[0m in \u001b[0;36m__new__\u001b[0;34m(cls, expr, cond)\u001b[0m\n\u001b[1;32m     28\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     29\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcond\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mBoolean\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 30\u001b[0;31m             raise TypeError(filldedent('''\n\u001b[0m\u001b[1;32m     31\u001b[0m                 \u001b[0mSecond\u001b[0m \u001b[0margument\u001b[0m \u001b[0mmust\u001b[0m \u001b[0mbe\u001b[0m \u001b[0ma\u001b[0m \u001b[0mBoolean\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     32\u001b[0m                 not `%s`''' % func_name(cond)))\n",
      "\u001b[0;31mTypeError\u001b[0m: \nSecond argument must be a Boolean, not `Add`"
     ]
    }
   ],
   "source": [
    "nonlinsolve([Eq(seq_geo_sum.subs(n,3),4),Eq(seq_geo_sum.subs(n,6),12)],[a,q])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "id": "23c948b6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4 - \\frac{16 \\left(\\frac{3}{4}\\right)^{n + 1}}{3}$"
      ],
      "text/plain": [
       "4 - 16*(3/4)**(n + 1)/3"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "seq_geo_sum.subs([(a,1),(q,Rational(3,4))])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "id": "cde8f877",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4 - \\frac{16 \\left(\\frac{3}{4}\\right)^{n + 1}}{3} = 4 - 3 \\left(\\frac{3}{4}\\right)^{n - 1}$"
      ],
      "text/plain": [
       "Eq(4 - 16*(3/4)**(n + 1)/3, 4 - 3*(3/4)**(n - 1))"
      ]
     },
     "execution_count": 140,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Eq(seq_geo_sum.subs([(a,1),(q,Rational(3,4))]),4-3*seq_expr.subs([(a,1),(q,Rational(3,4))]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "id": "6b0065bb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2^{n + 1} n$"
      ],
      "text/plain": [
       "2**(n + 1)*n"
      ]
     },
     "execution_count": 142,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(summation((n+1)*2**n,(n,1,n)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "id": "8d4571b1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\begin{matrix}2 a & 1\\\\1 & 3 - a^{2}\\end{matrix}\\right]$"
      ],
      "text/plain": [
       "Matrix([\n",
       "[2*a,        1],\n",
       "[  1, 3 - a**2]])"
      ]
     },
     "execution_count": 143,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A=Matrix([[2*a,1],[1,3-a**2]])\n",
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "id": "d0bcf59a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\begin{matrix}2\\\\-2\\end{matrix}\\right]$"
      ],
      "text/plain": [
       "Matrix([\n",
       "[ 2],\n",
       "[-2]])"
      ]
     },
     "execution_count": 144,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B=Matrix([2,-2])\n",
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "id": "2709d232",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\begin{matrix}1 & 0\\\\0 & 1\\end{matrix}\\right]$"
      ],
      "text/plain": [
       "Matrix([\n",
       "[1, 0],\n",
       "[0, 1]])"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(A.inv()*A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "id": "1dd75af8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\begin{matrix}\\frac{2 \\left(a^{2} - 4\\right)}{2 a^{3} - 6 a + 1}\\\\\\frac{2 \\left(2 a + 1\\right)}{2 a^{3} - 6 a + 1}\\end{matrix}\\right]$"
      ],
      "text/plain": [
       "Matrix([\n",
       "[2*(a**2 - 4)/(2*a**3 - 6*a + 1)],\n",
       "[ 2*(2*a + 1)/(2*a**3 - 6*a + 1)]])"
      ]
     },
     "execution_count": 148,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(A.inv()*B)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "id": "38fe0bb5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\begin{matrix}\\frac{10}{37}\\\\\\frac{14}{37}\\end{matrix}\\right]$"
      ],
      "text/plain": [
       "Matrix([\n",
       "[10/37],\n",
       "[14/37]])"
      ]
     },
     "execution_count": 149,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(A.inv()*B).subs(a,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "id": "44da7468",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\begin{matrix}- \\frac{6}{5}\\\\- \\frac{2}{5}\\end{matrix}\\right]$"
      ],
      "text/plain": [
       "Matrix([\n",
       "[-6/5],\n",
       "[-2/5]])"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(A.inv()*B).subs(a,-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d9ecebcd",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "toc-showmarkdowntxt": true
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
